Przejdź do głównej zawartości

Współpraca zespołowa

Współpraca zespołowa w Cursorze stoi na wspólnej konfiguracji, a nie na umiejętnościach pojedynczych osób: reguły projektu, ustawienia MCP, pliki promptów i komendy slash trafiają do repozytorium, a Team Rules zarządzane z panelu biją zarówno reguły projektu, jak i osobiste. Efekt jest taki, że agent nowego dewelopera daje pierwszego dnia to samo co agent weterana.

Ośmiu inżynierów korzysta z Cursora, a jakość wyników skacze na wszystkie strony. Trasy API wygenerowane u jednego mają obsługę błędów, walidację i logowanie. U drugiego obsługi błędów nie ma wcale. Trzeciemu wychodzi var zamiast const, bo jego reguły osobiste nadpisują ustawienia projektu. Jeden agent stawia średniki, drugi nie; jeden sypie typami any, drugi pisze ścisły TypeScript.

Kod wygenerowany przez AI wygląda, jakby pisało go pięć różnych osób, bo skonfigurowało go pięć różnych osób. Lekarstwem nie jest lepsze promptowanie na każdej maszynie, tylko przeniesienie konfiguracji do repozytorium, gdzie przechodzi review, ma historię i jest identyczna dla wszystkich.

  • Zacommitowany katalog .cursor/rules/, dzięki któremu kod generowany przez AI jest spójny w całym zespole
  • Konfigurację Team Rules na planach Team i Enterprise oraz kolejność pierwszeństwa rozstrzygającą, która reguła wygrywa
  • Wspólną konfigurację MCP, żeby agent każdego dewelopera miał te same narzędzia
  • Wielokrotnego użytku pliki promptów i komendy slash zapisujące dobre praktyki zespołu
  • Listę onboardingową, po której nowy deweloper pracuje produktywnie w Cursorze po jednym dniu
  • Proces wstępnego review z AI, dzięki któremu czas ludzi idzie na ocenę, a nie na odhaczanie listy
  • Politykę bezpieczeństwa równoważącą produktywność i zgodność z wymogami

To najważniejsza praktyka zespołowa: reguły projektu należą do repozytorium, a nie do ustawień pojedynczych osób. Każda reguła z .cursor/rules/ jest dostępna dla każdego, kto sklonuje repo, i każda rozmowa z agentem toczy się pod tymi samymi ograniczeniami.

Okno terminala
mkdir -p .cursor/rules

Reguła startowa, którą powinien mieć każdy zespół

Dział zatytułowany „Reguła startowa, którą powinien mieć każdy zespół”

Zacznij od jednej zawsze stosowanej reguły, która nazywa stack i rzeczy nienegocjowalne:

Reguła startowa zostaje krótka, bo stosuje się zawsze. Wszystko dłuższe ląduje we własnym pliku, żeby agent wczytywał to wtedy, gdy jest istotne, a nie przy każdej wiadomości:

.cursor/rules/code-style.md
## Code Style
- TypeScript strict mode. No 'any' types except where explicitly documented.
- Named exports only. No default exports.
- Functional components with hooks for React.
- camelCase for variables and functions. PascalCase for types, interfaces, and components.
- Use async/await. Never use .then() chains.
- All async functions must have try-catch error handling.
- Prefer fetch over axios for HTTP requests.
- Use pnpm for all package manager commands.
.cursor/rules/testing.md
## Testing Conventions
- Use vitest for all unit and integration tests.
- Test files live next to the code they test: src/services/__tests__/user.test.ts
- Use descriptive test names that explain the scenario: "should return 404 when user does not exist"
- Mock external dependencies (database, APIs) but not internal modules.
- Aim for 80% code coverage on new code.
- Always test error cases, not just happy paths.
.cursor/rules/architecture.md
## Architecture Rules
- API routes in src/api/ handle HTTP concerns only (parsing, validation, response formatting).
- Business logic goes in src/services/. Services never import from src/api/.
- Database operations go in src/repositories/. Services use repositories, never raw queries.
- Shared types go in src/types/. Types are the only thing that every layer can import.
- Do not create circular dependencies. If service A needs service B, inject it as a parameter.

Traktuj reguły jak kod, bo gniją jak kod:

  • Review reguł w PR-ach: dodanie albo zmiana reguły przechodzi przez to samo review co każda inna zmiana
  • Reguły poprawiane po wpadkach: gdy review człowieka wyłapie wzorzec, który agent przekręcił, popraw regułę w tym samym PR-ze, żeby to się nie powtórzyło
  • Kwartalny audyt: usuń nieaktualne odwołania i dopisz wzorce, których zespół zaczął używać w międzyczasie

Plany Team i Enterprise dokładają Team Rules: reguły zarządzane centralnie z panelu Cursora i stosowane u wszystkich członków zespołu we wszystkich projektach.

ZastosowanieTeam RulesReguły projektu
Standardy kodowania w całej organizacjiTakNie
Wymogi bezpieczeństwa i zgodnościTakNie
Wzorce architektoniczne konkretnego projektuNieTak
Konwencje związane z konkretną technologiąNieTak
Preferencje co do stylu komunikacjiTakNie
  1. Otwórz panel Cursora pod cursor.com/dashboard
  2. Przejdź do zakładki z treściami zespołu
  3. Kliknij “Add Rule”, żeby utworzyć nową regułę zespołową
  4. Napisz regułę jako zwykły tekst (Team Rules nie obsługują globów, alwaysApply ani typów reguł)
  5. Zdecyduj, czy regułę wymusić (blokuje wyłączenie jej przez członków zespołu)
  6. Włącz regułę, żeby zaczęła działać

Kolejność pierwszeństwa to Team Rules > reguły projektu > reguły użytkownika. Wymuszona Team Rule nadpisuje każdą sprzeczną regułę projektu czy osobistą i właśnie dlatego jest właściwym miejscem na standardy, które nie mogą się różnić: praktyki bezpieczeństwa, wzorce obsługi błędów, wymogi zgodności.

Jeśli zespół korzysta z serwerów MCP (baza danych, GitHub, Jira), zacommituj konfigurację, żeby każdy miał do dyspozycji te same narzędzia. Sięgaj po serwery utrzymywane — stare paczki npm @modelcontextprotocol/server-github i @modelcontextprotocol/server-postgres są oznaczone jako przestarzałe (“no longer supported”). Firmowy serwer GitHuba działa teraz jako zdalny endpoint, a referencyjny serwer Postgresa trafił do archiwum:

.cursor/mcp.json
{
"mcpServers": {
"github": {
"url": "https://api.githubcopilot.com/mcp/",
"headers": { "Authorization": "Bearer ${GITHUB_TOKEN}" }
},
"postgres": {
"command": "npx",
"args": ["-y", "@henkey/postgres-mcp-server", "--connection-string", "${DATABASE_URL}"]
}
}
}

Wpis GitHuba korzysta z hostowanego github/github-mcp-server (https://api.githubcopilot.com/mcp/); w zespole odciętym od sieci albo hostującym u siebie podmień go na build Dockera ze stdio z tego samego repozytorium. Dla Postgresa utrzymywany i świadomy odczytu jest @henkey/postgres-mcp-server (albo postgres-mcp od crystaldby). Wymagane zmienne środowiskowe opisz w README albo w przewodniku onboardingowym — tokeny każdy podaje własne, ale konfiguracja serwerów jest wspólna.

Prompty, które zespół uruchamia raz po raz, zapisz jako pliki w repozytorium:

Okno terminala
mkdir -p .cursor/prompts
.cursor/prompts/new-endpoint.md
Create a new API endpoint following these project conventions:
1. Route handler in src/api/[resource]/route.ts using the pattern in @src/api/users/route.ts
2. Service layer in src/services/[resource].ts using the pattern in @src/services/user.ts
3. Type definitions in src/types/[resource].ts
4. Vitest tests in src/services/__tests__/[resource].test.ts
5. Zod validation schema for request body
6. Proper error handling using our AppError class from @src/lib/errors.ts
Run pnpm test after implementation to verify everything passes.
.cursor/prompts/pre-pr.md
Review and fix all issues before this PR is ready:
1. pnpm run typecheck -- fix TypeScript errors
2. pnpm run lint -- fix linting issues
3. pnpm run test -- fix test failures (do not modify assertions)
4. Remove any console.log/debug statements
5. Verify all new exports are added to index files
6. Check that no sensitive data (API keys, passwords) is committed
Summarize all changes made.

Członkowie zespołu wciągają je do dowolnej rozmowy z agentem przez @.cursor/prompts/new-endpoint.md. Prompt zapisuje konwencje zespołu, więc najnowsza osoba produkuje wynik w tym samym kształcie co ta z najdłuższym stażem.

Komendy slash do przepływów, które uruchamiają wszyscy

Dział zatytułowany „Komendy slash do przepływów, które uruchamiają wszyscy”

Własne komendy slash mieszkają w .cursor/commands/ i wywołuje się je przedrostkiem /. To właściwa forma dla przepływu bez argumentów, który wszyscy uruchamiają tak samo.

Utwórz .cursor/commands/review.md:

---
description: Review code changes for quality, security, and consistency
---
Review the current changes (use git diff to see them) and check for:
1. **Security**: SQL injection, XSS, hardcoded secrets, missing auth checks
2. **Error handling**: All async operations have try/catch, errors use AppError format
3. **Testing**: New logic has corresponding tests, edge cases are covered
4. **Patterns**: Code follows existing patterns in the codebase (check similar files)
5. **Performance**: No N+1 queries, no unnecessary re-renders, no blocking operations
For each issue found, provide:
- The file and line number
- What the issue is
- A specific fix
Use only search tools -- do not make any edits.

Oraz .cursor/commands/pr-description.md:

---
description: Generate a PR description from current changes
---
Analyze the current branch changes (compare against main) and generate a PR description with:
1. **Summary**: 2-3 sentence overview of what changed and why
2. **Changes**: Bulleted list of specific changes, organized by area
3. **Testing**: How these changes were tested
4. **Migration notes**: Any database changes, environment variable additions, or breaking changes
Use git diff main...HEAD to see all changes. Do not make any edits.

Większość onboardingu dzieje się przy klonowaniu: .cursor/rules/, .cursor/commands/ i .cursor/prompts/ przychodzą razem z repozytorium, a Team Rules z panelu stosują się same. Zostaje konfiguracja maszyny i kilka pierwszych godzin prowadzonej praktyki.

Dwie rzeczy warto zrobić na żywo, a nie z listy: niech nowa osoba przejdzie jedno zadanie w trybie Ask, zanim dotknie trybu Agent, żeby najpierw zbudowała obraz bazy kodu, i usiądźcie razem do jej pierwszego zadania w trybie Agent, żeby pokazać, jak w tym repozytorium wygląda skuteczny prompt.

Oddaj Cursorowi pięć minut jednego cotygodniowego standupu. Co tydzień jedna osoba pokazuje prompt, który zadziałał wyjątkowo dobrze, znaleziony przepływ pracy, problem, którego nie umiała rozwiązać (zespół zwykle umie), albo propozycję nowej reguły projektu.

To właśnie ta pętla zwrotna nie pozwala wspólnej konfiguracji zwietrzeć: najlepsze prompty lądują w .cursor/prompts/, powtarzające się poprawki zamieniają się w reguły, a do przodu idzie cały zespół, a nie jeden entuzjasta.

Kod wygenerowany przez AI wymaga innego spojrzenia w review. Agent dobrze trzyma się wzorców, ale gubi logikę biznesową, wprowadza luki bezpieczeństwa i przekombinowuje proste rzeczy.

  • Zmyślone importy: paczki, których nie ma w zależnościach
  • Niespójne wzorce: inny wzorzec niż ten, który już istnieje, zwłaszcza tam, gdzie reguły są niepełne
  • Pominięte przypadki brzegowe: ścieżka szczęśliwa obsłużona dobrze, ścieżki błędów wcale
  • Przekombinowanie: abstrakcje, cache albo obsługa błędów, których ta funkcja jeszcze nie potrzebuje
  • Martwe pola bezpieczeństwa: SQL injection przez sklejanie stringów, brak sprawdzeń autoryzacji, testowe dane logowania zostawione w kodzie produkcyjnym

Zanim poprosi o review człowieka, każdy przepuszcza zmiany przez przebieg AI:

  1. Deweloper kończy funkcję
  2. Uruchamia @.cursor/prompts/pre-pr.md, żeby poprawić lintera, typy i testy
  3. Odpala Bugbota na gałęzi albo PR-ze (automatyczne wykrywanie błędów w Cursorze)
  4. Uruchamia zespołowy prompt review opisany niżej
  5. Naprawia wszystko, co wyszło w krokach 2-4
  6. Otwiera PR-a do review przez człowieka

Takie wstępne review wyłapuje większość rzeczy, które i tak zgłosiłby człowiek, dzięki czemu człowiek patrzy na decyzje architektoniczne, poprawność logiki biznesowej i kompromisy projektowe — dokładnie tam, gdzie AI jest najsłabsze.

Zapisana komenda /review powyżej to wersja na co dzień. Dłuższy prompt wklej wtedy, gdy chcesz, by review wprost sięgnęło po zacommitowane reguły i polowało na naruszenia architektury w rodzaju zależności cyklicznych:

Ostatnie sprawdzenie przed wystawieniem PR-a jest węższe i mechaniczne — dotyczy rzeczy wstydliwych, a nie architektonicznych:

Spisz politykę jako regułę, żeby egzekwował ją ten sam mechanizm co resztę, i omawiaj ją przy onboardingu:

.cursor/rules/security.md
## AI Security Policy
### What the AI Can Access
- All source code in the repository
- Development and staging databases via MCP (never production)
- Public documentation and APIs
- CI/CD logs and build artifacts
### What the AI Must Not Do
- Access production databases or servers
- Commit or push code without human review
- Store API keys, passwords, or secrets in code
- Disable security middleware or authentication checks
- Modify .env files or deployment configurations
### Privacy Requirements
- Enable Privacy Mode for all proprietary code
- Do not paste customer data into agent conversations
- Do not reference internal company documents by URL
- Review all AI-generated code for accidentally exposed credentials
### Auto-Run Restrictions
- Set Auto-Run Mode to Run in Sandbox or Ask Every Time. Never enable Run Everything.
- Restrict the Command Allowlist to test, build, lint, and file-creation commands only.
- Keep git push, deploy, npm publish, and any credential-touching commands off the allowlist so they always require approval.
- Do not rely on a denylist. Cursor deprecated the command denylist in 1.3 (it was trivially bypassable); the sandbox plus a tight allowlist is the supported safety model.

Na planie Team albo Enterprise przenieś nienegocjowalną połowę tego do wymuszonej Team Rule. Standard bezpieczeństwa, który każdy może sobie wyłączyć w ustawieniach, jest sugestią, a nie standardem.

Ludzie dostają różne wyniki mimo wspólnych reguł. Reguły użytkownika mają najniższe pierwszeństwo, więc nie nadpiszą Team Rules ani reguł projektu, ale lokalne, niezacommitowane pliki reguł wciąż mogą grać. Poszukaj plików reguł, które nigdy nie trafiły do repozytorium, a tam, gdzie osobista preferencja naprawdę kłóci się z regułą projektu, rozstrzygnijcie to zespołowo i zaktualizujcie regułę, zamiast utrzymywać obie.

Reguły wietrzeją razem z rozwojem bazy kodu. Zrób z aktualizacji reguły część samej zmiany: refaktorujesz wzorzec, do którego reguła się odwołuje — poprawiasz regułę w tym samym PR-ze.

Zbyt wiele reguł spowalnia agenta. Reguły zjadają tokeny kontekstu. Trzydzieści reguł z alwaysApply: true oznacza, że każda rozmowa startuje z sporym narzutem. Przejrzyj, które naprawdę muszą działać zawsze, a które wystarczy zawęzić globem albo zostawić decyzji agenta.

Review AI za bardzo hałasuje. Dopisz do promptu swoje wyjątki: “Our project intentionally uses ‘any’ types in the GraphQL resolver layer — do not flag these.” Im konkretniejszy prompt, tym mniej fałszywych alarmów i tym większa szansa, że ludzie będą go dalej uruchamiać.

Nikt nie wie, jakie komendy istnieją. Przedrostek / wylistuje je w czacie, ale nowe osoby nie wiedzą, żeby tam zajrzeć. Opisz je w README albo w przewodniku dla kontrybutorów, obok plików promptów.

Lista onboardingowa się dezaktualizuje. Przypisz jedną osobę do jej aktualizowania przy każdym większym wydaniu Cursora albo zmianie przepływu pracy i przeglądaj ją co najmniej raz na kwartał.

Tokeny do serwerów MCP wygasają. Ustaw przypomnienia w kalendarzu i opisz proces rotacji w przewodniku onboardingowym. Krótko żyjące tokeny z firmowego systemu zarządzania sekretami są lepsze niż długowieczne w .env.