Paweł Łukasiewicz: programista blogger
Paweł Łukasiewicz
2026-03-03
Paweł Łukasiewicz: programista blogger
Paweł Łukasiewicz
2026-03-03
Udostępnij Udostępnij Kontakt
Wprowadzenie

W poprzednim wpisie rozmawialiśmy o kontekście – co Copilot widzi, a czego nie. Teraz przechodzimy do praktyki: gdzie i jak skonfigurować Copilota żeby zachowywał się tak jak chcemy – konsekwentnie, w całym teamie, bez konieczności tłumaczenia wszystkiego od nowa przy każdej sesji.

Konfiguracja Copilota w VS Code działa na trzech poziomach: user-level, workspace-level i repository-level. Każdy poziom ma inny zakres, inne pliki i służy do innych celów. Jeśli nie rozumiesz tej hierarchii, bardzo łatwo wpaść w sytuację gdzie "u mnie działa, u kolegi nie" albo "skonfigurowałem to w ustawieniach ale jakoś nie działa" – i tracisz czas na debugowanie czegoś co wynika po prostu z nadpisywania ustawień przez wyższy poziom.

Oryginalna dokumentacja, na której bazuje ten wpis: Copilot Configuration Basics – Awesome GitHub Copilot Learning Hub.

Trzy poziomy konfiguracji

Zanim przejdziemy do konkretnych plików, warto zrozumieć hierarchię – bo ona decyduje co "wygrywa" gdy ustawienia na różnych poziomach są sprzeczne.

🔍 Hierarchia konfiguracji – co nadpisuje co?
USER Ustawienia użytkownika – domyślne dla wszystkich projektów
↓ nadpisywane przez
WORKSPACE Ustawienia workspace – dla aktualnie otwartego folderu
↓ nadpisywane przez
REPOSITORY Pliki w repozytorium – wersjonowane, wspólne dla całego teamu

Najwyższy priorytet ma konfiguracja z repozytorium – jeśli coś jest zdefiniowane tam, żadne ustawienie użytkownika tego nie nadpisze. To ważne dla spójności w teamie.

Omówmy teraz każdy poziom z osobna.

User-level – Twoje osobiste ustawienia

USER Zakres: tylko Twoja maszyna, wszystkie projekty

Ustawienia użytkownika obowiązują globalnie – dla każdego projektu który otworzysz na swojej maszynie, chyba że projekt ma własną konfigurację która je nadpisuje.

Gdzie to jest?

Ustawienia użytkownika w VS Code znajdziesz pod:

  • Windows: %APPDATA%\Code\User\settings.json
  • macOS: ~/Library/Application Support/Code/User/settings.json
  • Linux: ~/.config/Code/User/settings.json

Możesz też otworzyć to bezpośrednio przez Ctrl+Shift+P → "Open User Settings (JSON)".

Co tu ustawiać?

Na poziomie użytkownika lądują rzeczy które są osobiste i niezwiązane z konkretnym projektem:

{
  // Twój preferred model (może różnić się od teamowego)
  "github.copilot.chat.defaultModel": "gpt-4o",

  // Język interfejsu chatu
  "github.copilot.chat.localeOverride": "pl",

  // Czy Copilot ma działać w plikach markdown (np. notatki)
  "github.copilot.enable": {
    "*": true,
    "plaintext": true,
    "markdown": true,
    "scminput": false
  },

  // Osobiste preferencje podpowiedzi inline
  "github.copilot.editor.enableAutoCompletions": true,

  // Globalny plik instrukcji dla wszystkich projektów
  // (omówiony niżej)
  "github.copilot.chat.codeGeneration.useInstructionFiles": true
}
⚠️ User-level a wrażliwe dane

Plik settings.json użytkownika nie jest commitowany do repozytorium – to dobra wiadomość jeśli chodzi o dane prywatne. Ale to też oznacza że ustawienia użytkownika są niewidoczne dla reszty teamu. Wszystko co powinno być spójne w całym projekcie – przenieś na poziom workspace lub repozytorium.

Globalny plik instrukcji (user-level)

Oprócz settings.json możesz stworzyć globalny plik instrukcji który działa dla wszystkich projektów na Twojej maszynie, niezależnie od repozytorium:

  • VS Code: ~/.config/GitHub Copilot/instructions.md (macOS/Linux) lub %APPDATA%\GitHub Copilot\instructions.md (Windows)
  • JetBrains: ~/.config/github-copilot/intellij/global-copilot-instructions.md
🌟 Przykład: globalny plik instrukcji dla .NET developera

Treść pliku instructions.md na poziomie użytkownika:

Jestem senior .NET developerem. Domyślnie używam:
- C# 13 / .NET 9
- Nazewnictwo: PascalCase dla klas i metod, camelCase dla zmiennych lokalnych
- XML doc comments dla wszystkich publicznych API
- Preferuję record types dla niemutowalnych DTOs
- Nie używam var gdy typ nie jest oczywisty z prawej strony przypisania

Odpowiadaj po polsku jeśli piszę po polsku.

Taki plik sprawia że Copilot "wie" o Twoich preferencjach nawet gdy otwierasz zupełnie nowe repozytorium bez żadnej konfiguracji.

Workspace-level – ustawienia dla projektu

WORKSPACE Zakres: aktualnie otwarty folder / projekt, tylko Twoja maszyna

Ustawienia workspace obowiązują gdy masz otwarty konkretny folder w VS Code. Nadpisują ustawienia użytkownika. Mogą być commitowane do repozytorium przez folder .vscode/ – ale nie są obowiązkowe dla innych developerów.

Gdzie to jest?

Ustawienia workspace siedzą w katalogu .vscode/ w głównym folderze projektu:

  • .vscode/settings.json – ustawienia VS Code i Copilota dla tego projektu
  • .vscode/extensions.json – rekomendowane rozszerzenia (VS Code pyta o ich instalację)
  • .vscode/tasks.json – zadania build / test / run
  • .vscode/launch.json – konfiguracje debugowania

Co tu ustawiać?

Na poziomie workspace lądują rzeczy specyficzne dla technologii projektu, które chcesz zaproponować teamowi – ale nie wymuszać:

// .vscode/settings.json
{
  // Copilot włączony/wyłączony per język dla tego projektu
  "github.copilot.enable": {
    "*": true,
    "env": false,
    "dotenv": false
  },

  // Dla projektu .NET – formatter
  "editor.defaultFormatter": "ms-dotnettools.csharp",
  "editor.formatOnSave": true,
  "editor.tabSize": 4,

  // Pliki do zignorowania w przeszukiwaniu
  "search.exclude": {
    "**/bin": true,
    "**/obj": true,
    "**/node_modules": true
  }
}
// .vscode/extensions.json
{
  "recommendations": [
    "github.copilot",
    "github.copilot-chat",
    "ms-dotnettools.csdevkit",
    "ms-dotnettools.csharp",
    "ms-dotnettools.vscode-dotnet-runtime",
    "editorconfig.editorconfig"
  ]
}
🔍 .vscode/ commitować czy nie?

To temat który wraca w każdym teamie. Krótka odpowiedź: commituj – ale z głową.

Plik Commitować? Dlaczego
settings.json ✅ Tak Spójne formatowanie i konfiguracja Copilota dla całego teamu
extensions.json ✅ Tak Nowy developer dostaje propozycję instalacji odpowiednich rozszerzeń od razu
tasks.json ✅ Tak Wspólne komendy build/test/run
launch.json ✅ Tak (z wyjątkami) Konfiguracje debugowania – ale unikaj hardcodowanych ścieżek lokalnych
*.code-workspace ⚠️ Zależy Dla multi-root workspace tak, dla prostych projektów zbędne
Repository-level – wersjonowana konfiguracja dla teamu

REPOSITORY Zakres: wszystkie osoby pracujące przy tym repo, wszystkie maszyny

To najważniejszy poziom z perspektywy pracy zespołowej. Pliki konfiguracyjne siedzą w repozytorium, są wersjonowane razem z kodem i działają dla każdego kto sklonuje projekt – niezależnie od jego lokalnych ustawień.

Struktura katalogu .github/

Wszystkie pliki konfiguracyjne Copilota na poziomie repozytorium siedzą w katalogu .github/:

.github/
├── copilot-instructions.md        # Główny plik instrukcji dla całego repo
├── instructions/                  # Szczegółowe instrukcje per język / katalog
│   ├── csharp.instructions.md
│   ├── typescript.instructions.md
│   └── tests.instructions.md
├── prompts/                       # Reużywalne prompty (*.prompt.md)
│   ├── create-endpoint.prompt.md
│   └── write-migration.prompt.md
├── agents/                        # Definicje agentów
│   └── dotnet-senior.agent.md
├── skills/                        # Skille (foldery z SKILL.md)
│   └── generate-unit-tests/
│       ├── SKILL.md
│       └── templates/
└── chatmodes/                     # Tryby chatu
    └── code-review.chatmode.md

Główny plik: copilot-instructions.md

Plik .github/copilot-instructions.md to serce konfiguracji na poziomie repozytorium. Trafia automatycznie do każdej sesji Copilota w tym projekcie – bez żadnej dodatkowej konfiguracji z Twojej strony.

# Instrukcje dla GitHub Copilot – MyProject API

## Stack technologiczny
- .NET 9, C# 13
- Clean Architecture (Domain / Application / Infrastructure / API)
- Entity Framework Core 9 z PostgreSQL
- MediatR dla CQRS
- FluentValidation dla walidacji requestów
- xUnit + FluentAssertions + NSubstitute dla testów

## Zasady kodowania
- Nigdy nie umieszczaj logiki biznesowej w kontrolerach
- Każdy command/query przechodzi przez MediatR handler
- DTOs to record types – niemutowalne
- Każda metoda publiczna ma XML doc comment
- Nazwy metod asynchronicznych kończą się na Async

## Struktura projektu
- Nowe endpointy: MyProject.API/Controllers/
- Handlery: MyProject.Application/[Feature]/Commands/ lub /Queries/
- Encje: MyProject.Domain/Entities/
- Migracje EF: MyProject.Infrastructure/Migrations/

## Czego unikać
- Nie używaj `var` gdy typ nie wynika jasno z prawej strony
- Nie commituj sekretów – używaj user secrets lub zmiennych środowiskowych
- Nie wyłączaj analizatorów Roslynatora bez uzasadnienia w komentarzu
⚠️ copilot-instructions.md vs .instructions.md – jaka różnica?

To częste źródło zamieszania. Oto prosta zasada:

  • .github/copilot-instructions.md – jeden plik, globalne instrukcje dla całego repozytorium. Działa dla Copilot Chat, code completions i agent mode.
  • .github/instructions/*.instructions.md – wiele plików, każdy scopowany do konkretnych plików przez frontmatter applyTo. Precyzyjniejsza kontrola – np. inne instrukcje dla plików C# a inne dla plików testowych.

Zacznij od jednego copilot-instructions.md. Gdy zauważysz że różne części projektu potrzebują różnych instrukcji – wtedy sięgnij po plik.instructions.md z frontmatter (blok metadanych umieszczany na samym początku plików (zazwyczaj Markdown), oddzielony parą trzech myślników (---). Zazwyczaj napisany w formacie YAML, zawiera kluczowe informacje o dokumencie, takie jak tytuł, data, autor czy tagi, ułatwiając zarządzanie treścią w generatorach stron statycznych.).

Szczegółowe instrukcje z frontmatter (applyTo)

Pliki *.instructions.md pozwalają na precyzyjne scopowanie instrukcji za pomocą frontmatter:

---
applyTo: "**/*.cs"
description: "Zasady dla kodu C# w tym projekcie"
---

# Instrukcje C#

Używaj pattern matchingu zamiast długich if/else gdzie to możliwe.
Preferuj `switch` expressions nad `switch` statements.
Dla kolekcji używaj LINQ zamiast ręcznych pętli – ale tylko gdy poprawia czytelność.
---
applyTo: "**/*Tests.cs,**/*Spec.cs"
description: "Zasady dla plików testowych"
---

# Instrukcje dla testów

Wzorzec: Arrange / Act / Assert z komentarzami w każdej sekcji.
Nazwy testów: MethodName_Scenario_ExpectedResult (np. CancelOrder_WhenAlreadyCancelled_ThrowsException).
Jeden Assert per test – jeśli potrzebujesz więcej, rozdziel na osobne testy.
Mocki: tylko NSubstitute, nigdy Moq.
Tabelka porównawcza – co gdzie ustawiać?

To jest właśnie ten dodatek do dokumentacji który chciałem Wam dać. W praktyce najtrudniej jest zdecydować gdzie dane ustawienie powinno trafić. Poniżej zebrałem zasady w jednej tabelce:

Co konfigurujesz USER WORKSPACE REPO
Preferowany model Copilota (gpt-4o, claude...) - -
Język chatu (locale) - -
Podpowiedzi inline włączone/wyłączone - -
Osobiste preferencje stylu kodu - -
Formatter i tabSize dla projektu - -
Rekomendowane rozszerzenia VS Code - -
Konfiguracje debugowania (launch.json) - -
Copilot wyłączony dla .env / sekretów -
Stack technologiczny i architektura projektu - -
Zasady i standardy kodowania teamu - -
Reguły compliance i bezpieczeństwa - -
Agenci, Skills, Prompts - -
Decyzje architektoniczne (ADR) - -
🔍 Prosta reguła decyzyjna

Gdy zastanawiasz się gdzie coś umieścić, zadaj sobie jedno pytanie: "Czy inny developer w teamie powinien mieć to samo ustawienie?"

  • Nie (osobiste preferencje) → USER
  • Tak, ale to kwestia komfortu pracy (formatter, rozszerzenia) → WORKSPACE w .vscode/
  • Tak, to obowiązuje wszystkich i powinno być wersjonowaneREPO w .github/
Dlaczego to ma znaczenie w teamie?

Wyobraź sobie klasyczny scenariusz onboardingu: nowy developer dołącza do projektu. Klonuje repo, otwiera VS Code i zaczyna pracować z Copilotem. Co dostaje?

🌟 Onboarding – przed i po prawidłowej konfiguracji
❌ Bez konfiguracji repo ✅ Z konfiguracja repo
Copilot generuje kod w stylu który zna z internetu – var wszędzie, Moq zamiast NSubstitute, logika w kontrolerach, brak XML doc.

Developer nie wie jakich rozszerzeń potrzebuje – instaluje za dużo lub za mało.

Pierwsze PR-y wymagają dziesiątek komentarzy o stylu zamiast merytoryki.
VS Code od razu proponuje instalację właściwych rozszerzeń.

Copilot od pierwszej sesji zna architekturę, stack i zasady projektu.

Generowany kod trafia od razu w obowiązujące wzorce – pierwsze PR-y dyskutują o logice, nie o formatowaniu.

Dobrze skonfigurowane repozytorium sprawia że Copilot działa jak senior developer który był przy projekcie od początku – nie jak stażysta który nie czytał żadnej dokumentacji.

💪 Zadanie dla Ciebie – podstawowy setup w 15 minut

Zrób to w swoim aktualnym projekcie:

  1. Stwórz plik .github/copilot-instructions.md i wpisz: stack technologiczny, 3-5 kluczowych zasad kodowania, czego unikać. Nie przesadzaj z długością – 20-30 linii wystarczy na start.
  2. Sprawdź czy masz .vscode/extensions.json z rekomendowanymi rozszerzeniami. Jeśli nie – stwórz go i dodaj przynajmniej github.copilot i github.copilot-chat.
  3. W .vscode/settings.json dodaj "github.copilot.enable": { "env": false, "dotenv": false } – żeby Copilot nie podpowiadał w plikach z sekretami.
  4. Scommituj zmiany i poproś kolegę z teamu żeby sklonował repo od zera i powiedział co widzi. Pierwsze wrażenie nowego developera to najlepsza weryfikacja czy konfiguracja ma sens.
Podsumowanie

Trzy poziomy konfiguracji, trzy różne zastosowania:

  • USER User-level – osobiste preferencje, żyje tylko na Twojej maszynie. Model, język, własny styl. Nigdy nie commitowany.
  • WORKSPACE Workspace-level – ustawienia projektu w .vscode/. Formatter, rozszerzenia, konfiguracje debugowania. Commituj – ale nie wymuszaj.
  • REPO Repository-level – versjonowana wiedza o projekcie w .github/. Instrukcje, agenci, skille, zasady teamu. Obowiązkowe dla spójnej pracy w grupie.

Im lepiej wypełnisz poziom repozytorium, tym mniej czasu tracisz na tłumaczenie kontekstu – zarówno Copilotowi, jak i nowym developerom w teamie.

W kolejnym wpisie wchodzimy głębiej w temat instrukcji: jak definiować własne instrukcje – jak je pisać żeby działały, czego unikać i jak je scopować do konkretnych części projektu.