W poprzednim wpisie nauczyliśmy się tworzyć Skills – samowystarczalne zdolności które Copilot ładuje na żądanie. Teraz wchodzimy na najwyższy poziom customizacji: własni agenci. To właśnie tutaj wszystko co do tej pory omawialiśmy – instrukcje, skills, narzędzia, MCP servery – łączy się w jedną spójną konfigurację wyspecjalizowanego asystenta.
Wyobraź sobie że zamiast za każdym razem tłumaczyć Copilotowi "hej, pracuję przy backendzie .NET, używamy Clean Architecture, testy piszemy w xUnit, baza to PostgreSQL, mamy ten i ten styl code review..." – po prostu przełączasz się na agenta @dotnet-backend który to wszystko już wie i ma pod ręką wszystkie narzędzia których potrzebuje. To właśnie agent.
Zanim zaczniesz tworzyć agenta – odpowiedz sobie na jedno pytanie: czy go naprawdę potrzebujesz?. Agent to najpotężniejsze ale też najbardziej "ciężkie" narzędzie w ekosystemie Copilota. Dla wielu zadań wystarczy dobra instrukcja albo skill. Tworzenie agenta gdzie wystarczyłby skill to trochę jak wjeżdżanie czołgiem po bułki.
Poniżej konkretna tabelka decyzyjna – to mój główny dodatek do tego wpisu:
Sytuacja / potrzeba
Instrukcja
Skill
Agent
Chcę żeby Copilot znał zasady kodowania projektu zawsze
✅ Tak
❌ Nie
❌ Nie
Chcę ustandaryzować jedno konkretne, powtarzalne zadanie (np. generowanie testów)
❌ Nie
✅ Tak
❌ Nie
Chcę żeby Copilot miał dostęp do zewnętrznych narzędzi (baza, GitHub, Jira)
❌ Nie
❌ Nie
✅ Tak
Chcę różne "tryby pracy" dla różnych ról (backend dev, security reviewer, ops)
❌ Nie
❌ Nie
✅ Tak
Chcę przypisać Copilota do issue na GitHubie żeby samodzielnie pracował
❌ Nie
❌ Nie
✅ Tak
Chcę narzucić guardrails na poziomie całej sesji (np. "nigdy nie modyfikuj pliku X")
⚠️ Może
❌ Nie
✅ Tak
Zadanie wymaga bogatego kontekstu z wielu źródeł (kod + baza + dokumentacja + PR)
❌ Nie
⚠️ Może
✅ Tak
Chcę żeby Copilot sam decydował o kolejności kroków (planowanie → implementacja → testy)
❌ Nie
❌ Nie
✅ Tak
Potrzebuję czegoś szybko, bez dużego setup
✅ Tak
✅ Tak
❌ Nie
Chcę użyć konkretnego modelu AI dla tego zadania (np. Claude dla analizy, szybszy model dla boilerplate)
❌ Nie
❌ Nie
✅ Tak
🔍 Prosta reguła decyzyjna
Zacznij od instrukcji. Gdy masz konkretne, powtarzalne zadanie z bogatym kontekstem – dodaj skill. Gdy potrzebujesz integracji z zewnętrznymi narzędziami, specyficznego modelu AI, przypisywania do issues albo różnych "trybów pracy" dla różnych ról w teamie – wtedy sięgasz po agenta.
Agent nie zastępuje instrukcji ani skills – on je wykorzystuje. Dobrze zaprojektowany agent opiera się na solidnych instrukcjach i korzysta ze skills które już masz. To warstwa orkiestracji, nie zastępstwo dla niższych warstw.
Anatomia pliku agenta
Agent to plik Markdown z YAML frontmatter – podobnie jak skill, ale o innej strukturze i innym zakresie możliwości. Plik nosi rozszerzenie .agent.md i mieszka w katalogu .github/agents/.
🔍 Pola frontmatter agenta – co i po co
name
WYMAGANE
Unikalny identyfikator. Używany jako @nazwa w chatcie i w dropdown agentów. Tylko małe litery i myślniki.
description
WYMAGANE
Opis co agent robi – widoczny w pikkerze agentów w VS Code. Powinien jasno komunikować dla jakiego rodzaju zadań agent jest właściwy. Użytkownicy wybierają agenta na podstawie tego opisu.
model
ZALECANE
Model AI który agent używa. Możliwe wartości: gpt-4o, claude-sonnet-4-5, o3, gpt-4.1 itp. Pozwala dobrać model do złożoności zadania – bardziej wymagające zadania wymagają silniejszego modelu. Ignorowane przez Copilot Coding Agent na GitHub.com.
tools
ZALECANE
Lista narzędzi do których agent ma dostęp. Możesz wpisać ["*"] żeby dać dostęp do wszystkich, albo podać konkretne nazwy. Szczegóły poniżej.
target
OPCJONALNEvscode lub github-copilot. Jeśli pominięte, agent dostępny w obu środowiskach. Przydatne gdy konfiguracja agenta jest specyficzna dla jednego środowiska.
handoffs
OPCJONALNE
Lista innych agentów do których ten agent może przekazać zadanie. Pozwala budować orkiestry agentów – np. agent analizy przekazuje do agenta implementacji który przekazuje do agenta testów.
mcp-server
OPCJONALNE
Konfiguracja zewnętrznych MCP serverów bezpośrednio w profilu agenta. Alternatywa dla globalnej konfiguracji MCP w repozytorium.
Minimalny, działający plik agenta wygląda tak:
---
name: readme-creator
description: Agent specjalizujący się w tworzeniu i ulepszaniu plików README
---
Jesteś specjalistą od dokumentacji. Twój zakres to wyłącznie pliki README
i powiązana dokumentacja – nie modyfikuj plików z kodem.
Twórz pliki README z: opisem projektu, instrukcją instalacji,
przykładami użycia i sekcją contributing.
⚠️ Prompt może mieć maksymalnie 30 000 znaków
Treść Markdown poniżej frontmatter (czyli właściwy prompt agenta) może mieć do 30 000 znaków. To dużo – ale warto korzystać z tej przestrzeni mądrze. Prompt powinien definiować zachowanie i ekspertyzę, a nie zastępować instrukcje i skills które lepiej trzymać osobno i reużywać.
Narzędzia – co agent może robić
Jedną z największych przewag agenta nad instrukcją czy skillem jest możliwość korzystania z narzędzi – zarówno wbudowanych w Copilota jak i zewnętrznych przez MCP servery. To właśnie daje agentowi możliwość przeszukiwania kodu, uruchamiania komend, czytania plików i integracji z zewnętrznymi systemami.
🔍 Wbudowane narzędzia Copilota – przegląd aliasów
Alias
Co robi
Kiedy dawać agentowi
read
Czytanie plików z repozytorium
Prawie zawsze – agent musi widzieć kod
edit
Edytowanie i tworzenie plików
Gdy agent ma pisać lub modyfikować kod
search
Semantyczne przeszukiwanie kodu
Gdy agent musi znaleźć wzorce, zależności, usages
terminal
Uruchamianie komend w terminalu
Gdy agent ma budować, testować, migrować
browser
Przeglądanie stron (dokumentacja, API)
Gdy agent potrzebuje zewnętrznej dokumentacji
code_search
Przeszukiwanie przez GitHub Code Search
Gdy agent przeszukuje nie tylko lokalne repo
github
GitHub API (issues, PRs, comments)
Agent do code review, zarządzania issues
Uwaga: Nazwy narzędzi mogą się różnić między VS Code, JetBrains i Eclipse. Zawsze weryfikuj dostępne narzędzia przez ikonę Tools w oknie chatu przed deploymentem do teamu.
Jak deklarować narzędzia w pliku agenta
---
name: dotnet-backend
description: Senior .NET backend developer z dostępem do kodu i terminala
model: claude-sonnet-4-5
tools:
- read
- edit
- search
- terminal
---
Treść promptu...
Możesz też dać dostęp do wszystkich narzędzi – przydatne gdy tworzysz agenta ogólnego przeznaczenia:
tools: ["*"]
Albo zintegrować zewnętrzny MCP server bezpośrednio w profilu agenta:
Osobisty workflow – Twoje preferencje na każdy projekt
🔍 Deduplicacja – która konfiguracja "wygrywa"?
Gdy ten sam agent (ta sama nazwa pliku) istnieje na kilku poziomach – niższy poziom ma priorytet. Czyli konfiguracja z .github/agents/ w Twoim repo nadpisuje agenta o tej samej nazwie z poziomu organizacji. To pozwala na nadpisywanie firmowych defaults dla konkretnego projektu bez zmiany globalnej konfiguracji.
Jak napisać dobry prompt agenta
Treść Markdown poniżej frontmatter to właściwy prompt agenta – jego "charakter" i "instrukcja obsługi". Dokumentacja i doświadczenie praktyczne wskazują na cztery elementy które powinny się tam znaleźć:
1. Precyzyjna ekspertyza – nie "software engineer"
Im bardziej konkretna definicja roli, tym lepsze zachowanie agenta. Ogólna definicja to stracone miejsce w prompcie.
❌ Za ogólne
Jesteś doświadczonym programistą który pomaga pisać dobry kod.
✅ Konkretne
Jesteś seniorem .NET 9 specjalizującym się w Clean Architecture, CQRS z MediatR i EF Core 9. Twoja ekspertyza obejmuje projektowanie warstwy Application, optymalizację zapytań PostgreSQL i projektowanie publicznych API zgodnie z REST best practices.
2. Styl pracy – jak agent ma się zachowywać
Czy agent ma pytać o wyjaśnienia czy działać autonomicznie? Czy ma być zwięzły czy dokładny? Czy po implementacji ma od razu pisać testy?
## Styl pracy
- Przed implementacją krótko opisz plan w punktach – max 5 kroków
- Pytaj o wyjaśnienia TYLKO gdy brakuje krytycznych informacji
(np. nie znasz nazwy encji). Drobne decyzje podejmuj sam.
- Po każdej zmianie uruchom testy: `dotnet test`
- Jeśli testy nie przejdą – napraw przed zgłoszeniem gotowości
3. Guardrails – czego agent nigdy nie robi
To jest sekcja której nie można pominąć przy agentach z dostępem do terminala i edycji plików. Bez guardrails agent może modyfikować rzeczy których nie powinien tykać.
## Czego nie rób
- Nigdy nie modyfikuj plików migracji EF Core które są już zastosowane
- Nie zmieniaj pliku Program.cs bez wyraźnej prośby
- Nie commituj zmian – tylko przygotuj, użytkownik commituje sam
- Nie dodawaj nowych zależności NuGet bez potwierdzenia
- Nigdy nie usuwaj istniejących testów – tylko dodawaj nowe
4. Przykłady oczekiwanego outputu
Dokumentacja podkreśla to wyraźnie: pokaż agentowi jak ma wyglądać wynik jego pracy. Dla agenta do code review – przykład komentarza review. Dla agenta do commitów – przykład wiadomości commitu. To najskuteczniejszy sposób na spójny format outputu.
## Format komentarzy code review
Każdy problem opisz według wzorca:
**[POZIOM] Krótki tytuł**
Plik: `ścieżka/do/pliku.cs`, linia: X
Problem: [opis co jest nie tak i dlaczego]
Sugestia: [konkretna propozycja poprawki]
Poziomy: BLOCKER / WARNING / INFO
- BLOCKER: błąd logiczny, problem bezpieczeństwa, brakujący test
- WARNING: naruszenie standardów, potencjalny bug
- INFO: sugestia stylistyczna, okazja do refactoringu
Gotowy agent dla .NET developera
Kompletny przykład agenta który łączy wszystko omówione w tym wpisie. Agent do code review dla projektów .NET z Clean Architecture – gotowy do skopiowania i dostosowania.
📄 .github/agents/dotnet-code-reviewer.agent.md
---
name: dotnet-code-reviewer
description: >
Senior .NET code reviewer specjalizujący się w Clean Architecture,
CQRS i EF Core. Reviewuje PR-y pod kątem wzorców architektonicznych,
standardów kodowania i bezpieczeństwa. Używaj gdy chcesz zreviewować
zmiany, sprawdzić PR lub ocenić jakość kodu.
model: claude-sonnet-4-5
tools:
- read
- search
- github
---
# .NET Code Reviewer
## Twoja rola
Jesteś seniorem .NET 9 z 10-letnim doświadczeniem w projektach
enterprise. Specjalizujesz się w Clean Architecture, CQRS z MediatR,
EF Core 9 i ASP.NET Core. Reviewujesz kod jak doświadczony mentor –
wskazujesz problemy z uzasadnieniem i zawsze proponujesz poprawkę.
## Co sprawdzasz w każdym review
### Architektura i separacja warstw
- Czy logika biznesowa nie przecieka do kontrolerów lub infrastruktury?
- Czy handlery MediatR nie robią zbyt wielu rzeczy naraz?
- Czy zależności idą we właściwym kierunku (Domain ← Application ← Infrastructure)?
### Konwencje kodowania projektu
- Brak `var` gdy typ nie wynika z prawej strony
- XML doc comments na publicznych metodach i klasach
- Nazwy asynchroniczne z sufiksem `Async`
- Record types dla niemutowalnych DTOs
### Jakość testów
- Czy każda nowa publiczna metoda ma przynajmniej jeden test?
- Czy testy weryfikują zachowanie a nie implementację?
- Wzorzec AAA z komentarzami w każdym teście
### Bezpieczeństwo
- Czy dane wejściowe są walidowane przez FluentValidation?
- Czy nie ma SQL injection przez raw queries EF Core?
- Czy sekrety nie trafiają do logów?
### Wydajność
- Czy zapytania EF Core nie powodują N+1?
- Czy używany jest `.AsNoTracking()` dla zapytań read-only?
- Czy duże listy mają paginację?
## Styl pracy
1. Przeczytaj wszystkie zmienione pliki zanim zaczniesz komentować
2. Najpierw napisz krótkie podsumowanie co zmiana robi i jaki ma cel
3. Następnie listuj problemy według priorytetów (BLOCKER → WARNING → INFO)
4. Na końcu napisz ogólną ocenę: APPROVE / REQUEST CHANGES / NEEDS DISCUSSION
## Format komentarzy
**[BLOCKER/WARNING/INFO] Krótki tytuł**
Plik: `ścieżka/do/pliku.cs`, linia: X–Y
Problem: [opis co jest nie tak i dlaczego to problem]
Sugestia:
```csharp
// przykładowy poprawiony kod
```
## Guardrails
- Nie modyfikuj żadnych plików – tylko czytaj i komentuj
- Nie commituj żadnych zmian
- Jeśli nie masz dostępu do kontekstu (np. nie widzisz interfejsu który
implementuje klasa) – zaznacz to w komentarzu zamiast zakładać
- Nie komentuj kwestii stylistycznych jako BLOCKER
Drugi przykład – agent do planowania implementacji:
📄 .github/agents/dotnet-planner.agent.md
---
name: dotnet-planner
description: >
Planista implementacji dla projektów .NET z Clean Architecture.
Analizuje wymagania i przygotowuje szczegółowy plan implementacji
z listą plików do stworzenia i modyfikacji. Używaj przed implementacją
nowej funkcji żeby zaplanować podejście.
model: gpt-4o
tools:
- read
- search
---
# .NET Implementation Planner
## Twoja rola
Tworzysz precyzyjne plany implementacji dla seniorów .NET.
Nie piszesz kodu – piszesz plan który developer lub agent implementujący
może wykonać krok po kroku.
## Format planu
### 1. Zrozumienie wymagania
[Parafraza tego co ma być zaimplementowane – żeby potwierdzić rozumienie]
### 2. Analiza istniejącego kodu
[Co już istnieje co można reużyć lub rozszerzyć]
### 3. Lista plików do stworzenia
| Plik | Warstwa | Co zawiera |
|------|---------|------------|
| `Application/Orders/Commands/CancelOrderCommand.cs` | Application | MediatR command |
| ... | ... | ... |
### 4. Lista plików do modyfikacji
| Plik | Co zmienić |
|------|------------|
| `API/Endpoints/OrderEndpoints.cs` | Dodać endpoint POST /{id}/cancel |
### 5. Kolejność implementacji
1. [krok 1 – dlaczego w tej kolejności]
2. [krok 2]
...
### 6. Potencjalne ryzyka
[Co może pójść nie tak, na co zwrócić uwagę]
### 7. Kryteria gotowości
- [ ] Wszystkie testy przechodzą
- [ ] Endpoint zwraca 200 dla poprawnego scenariusza
- [ ] Endpoint zwraca 404 gdy zamówienie nie istnieje
- [ ] Walidacja odrzuca niepoprawne dane
## Guardrails
- Nie implementuj kodu – tylko planuj
- Jeśli wymaganie jest niejasne – zadaj maksymalnie 2 pytania
precyzujące zanim zaczniesz planować
Jak używać agenta w VS Code
Po stworzeniu i scommitowaniu pliku agenta masz kilka sposobów na jego uruchomienie:
1. Dropdown agentów w Copilot Chat
W panelu Copilot Chat kliknij dropdown na górze (gdzie normalnie wybierasz tryb) i wybierz swojego agenta z listy. Od tej chwili cała sesja działa w kontekście tego agenta.
2. @ syntax w chatcie
Wpisz @dotnet-code-reviewer bezpośrednio w polu chatu – Copilot przełączy się na tego agenta dla danego zapytania.
3. Przypisanie do issue na GitHubie
To jest prawdziwa magia agentic development. W zakładce Issues na GitHubie możesz przypisać konkretnego agenta do issue – Copilot Coding Agent przejmie zadanie, przeskanuje kod, zaimplementuje rozwiązanie i otworzy PR. Ty tylko reviewujesz.
🌟 Przykład: kompletny workflow z agentem
Otwierasz issue: "Dodaj endpoint do anulowania zamówień z walidacją i testami"
Przełączasz na @dotnet-planner – agent analizuje codebase i prezentuje plan implementacji
Akceptujesz plan lub korigujesz kilka punktów
Przypisujesz issue do Copilot Coding Agent z profilem dotnet-backend – agent implementuje zgodnie z planem
Copilot otwiera PR z implementacją
Przełączasz na @dotnet-code-reviewer – agent reviewuje PR i daje Ci sformatowany feedback
Twoja rola w całym procesie: zatwierdzenie planu, ewentualna korekta, review. Nie piszesz linii kodu.
💪 Zadanie dla Ciebie – stwórz pierwszego agenta
Weź agenta dotnet-code-reviewer i zainstaluj go w swoim projekcie:
Stwórz katalog .github/agents/
Wklej plik dotnet-code-reviewer.agent.md i dostosuj sekcję "Konwencje kodowania projektu" do swoich aktualnych zasad
Scommituj i odczekaj chwilę na zaindeksowanie
Otwórz Copilot Chat, wybierz agenta z dropdown i wpisz: "Zreviewuj ostatnie zmiany w #file:OrderService.cs"
Porównaj jakość i format tego review z tym co dostawałeś wcześniej od zwykłego Copilota
Podsumowanie
Własni agenci to szczyt możliwości customizacji Copilota – i jednocześnie narzędzie które warto wprowadzać rozważnie, zaczynając od prostszych warstw.
✅ Agent to nie zastępstwo dla instrukcji i skills – to warstwa orkiestracji która z nich korzysta. Buduj od dołu: instrukcje → skills → agenci.
✅ Tabelka decyzyjna – instrukcja gdy zawsze, skill gdy jedno konkretne zadanie, agent gdy integracje z narzędziami / różne role / przypisywanie do issues.
✅ Cztery elementy dobrego promptu: precyzyjna ekspertyza, styl pracy, guardrails, przykłady oczekiwanego outputu.
✅ Trzy poziomy: repo (.github/agents/), organizacja (.github-private/agents/), osobisty (~/.copilot/agents/). Niższy poziom ma priorytet.
✅ Handoffs – agenci mogą przekazywać sobie zadania, budując orkiestry wyspecjalizowanych asystentów.
✅ Dwa gotowe agenty dla .NET: dotnet-code-reviewer i dotnet-planner – gotowe do skopiowania i użycia.
W kolejnym wpisie wchodzimy w jeden z najgorętszych tematów 2025/2026: MCP Servers – jak Copilot uzyskuje dostęp do zewnętrznych narzędzi, baz danych i API, i jak to skonfigurować dla swojego projektu.