Dotychczas wszystko co robiliśmy działo się w edytorze – instrukcje, skills, agenci, MCP serwery, hooks. Copilot był asystentem który reagował na Twoje polecenia w VS Code, a potem sprzątał po sobie przez hooks. Ale co jeśli chcesz żeby cały workflow uruchamiał się samodzielnie, bez Twojego udziału – w nocy, przy każdym nowym issue, albo gdy ktoś wpisze /check w komentarzu do PR?
Agentic Workflows to odpowiedź na to pytanie. To pliki Markdown które definiują autonomiczne automatyzacje uruchamiane przez GitHub Actions – ale zamiast YAML z krokimi shellowymi, piszesz naturalne instrukcje dla agenta. GitHub kompiluje je do wykonywalnego workflow, Copilot Coding Agent przejmuje wykonanie i działa autonomicznie: analizuje kod, tworzy issues, pisze komentarze do PR, generuje raporty.
Zanim wejdziemy w szczegóły, jedno pytanie które na pewno masz: skoro hooks już automatyzują działania agenta – to po co jeszcze workflows? Oto czysta granica:
🪝 Hooks (wpis 9)
Reagują na zdarzenia wewnątrz sesji agenta w VS Code
Działają na Twojej lokalnej maszynie
Ty musisz zainicjować sesję – hook tylko ją wzmacnia
Deterministyczne – skrypty shell, nie AI
Idealne: quality gates, security, formatowanie
⚡ Agentic Workflows
Reagują na zdarzenia repozytorium (issue, push, cron)
Działają w GitHub Actions – bez Twojej maszyny
Uruchamiają się bez Twojego udziału 24/7
Agentyczne – AI rozumuje, planuje, pisze
Idealne: raporty, triage, code review, compliance
🔍 Prosta zasada podziału
Hook = automatyzacja w trakcie Twojej sesji pracy z agentem. Blokuje, formatuje, sprawdza – zanim agent skończy. Agentic Workflow = automatyzacja zamiast Twojej pracy. Agent sam inicjuje, sam analizuje, sam raportuje – Ty tylko przeglądasz wyniki.
W dojrzałym projekcie masz oba: hooks pilnują jakości podczas pracy developera, workflows dbają o repozytorium gdy nikt nie patrzy.
Jak to działa pod spodem – architektura
Kluczowy element który odróżnia Agentic Workflows od zwykłych GitHub Actions to kompilator gh aw. Zamiast ręcznie pisać YAML z krokami Actions – piszesz Markdown z naturalnymi instrukcjami, a CLI kompiluje to do gotowego .lock.yml.
── Architektura Agentic Workflow ──
Ty piszesz:daily-check.md ← Markdown + YAML frontmatter │ ▼ gh aw compile ← kompilujesz lokalnie │ ▼ Powstaje:daily-check.lock.yml ← GitHub Actions workflow │ ▼ (trigger: cron / event / slash command) GitHub Actions runner uruchamia workflow │ ▼ Copilot Coding Agent czyta instrukcje z .md i wykonuje zadanie │ ▼ (safe-outputs – agent może tylko tyle ile mu pozwolisz) Wynik:issue / komentarz / PR / raport w repozytorium
Zarówno plik .md jak i wygenerowany .lock.yml commitujesz do repo – .md to źródło prawdy (tutaj edytujesz), .lock.yml to artefakt kompilacji który uruchamia GitHub Actions. Po każdej edycji .md rekompilujesz przez gh aw compile.
Anatomia pliku workflow
Plik workflow to Markdown z YAML frontmatter. Frontmatter deklaruje metadane, wyzwalacze, uprawnienia i guardrails. Treść Markdown to instrukcje naturalne które Copilot Coding Agent wykonuje.
🔍 Pola frontmatter – co i po co
name
WYMAGANE Czytelna nazwa workflow – pojawia się w GitHub Actions UI i listach.
description
WYMAGANE Zwięzły opis co workflow robi i kiedy go używać. Widoczny w bibliotece workflowów.
on
WYMAGANE Konfiguracja wyzwalaczy. Trzy typy: schedule (cron), zdarzenia repo (issues.opened, push) oraz slash commands. Szczegóły poniżej.
permissions
WYMAGANE Uprawnienia GitHub API których agent potrzebuje. Zawsze używaj least-privilege – tylko tyle ile faktycznie potrzebne. Np. contents: read, issues: write, pull-requests: read.
safe-outputs
OPCJONALNE Guardrails – co agent może tworzyć lub modyfikować. Np. pozwalasz na tworzenie issues tylko z określonym prefiksem tytułu i etykietami. Agent nie może wyjść poza te ograniczenia nawet jeśli instrukcje mu to każą.
Typy wyzwalaczy
Typ
Przykład w frontmatter
Kiedy odpala
schedule
schedule: daily on weekdays schedule: every monday at 9am
Automatycznie o zadanej porze – naturalny język, nie cron.
Gdy nastąpi zdarzenie w repozytorium – bez Twojego udziału.
slash command
slash-command: /check slash-command: /triage
Gdy ktoś wpisze komendę w komentarzu do issue lub PR.
ręczne
workflow_dispatch: true
Uruchomienie z GitHub Actions UI lub przez gh aw run.
⚠️ safe-outputs – nie pomijaj tego pola
Bez safe-outputs agent może tworzyć dowolne issues, komentarze i PRy. To może szybko zaśmiecić repozytorium przy błędnej konfiguracji lub podatności na prompt injection w treści issue. Zawsze definiuj title-prefix i labels dla tworzonych issues – łatwo je wtedy filtrować i usunąć jeśli coś pójdzie nie tak.
.NET
Schemat przepływu pracy dla projektu .NET
To jest mój główny dodatek do tego wpisu. Zamiast omawiać ogólne przypadki użycia – konkretna tabelka która pokazuje jak Agentic Workflows mogą wyglądać w typowym projekcie backendowym .NET. Każdy wiersz to gotowy przepis: co wyzwala workflow, co agent robi, jaki jest wynik i jak go skonfigurować.
Schemat zakłada projekt z Clean Architecture, repozytorium na GitHub, CI w GitHub Actions i teamem kilku developerów.
Trigger
Co agent robi
Wynik
Kiedy warto wdrożyć
repo event
Nowe issue otwarte issues: [opened]
Analizuje treść issue. Sprawdza czy problem jest jasno opisany. Sugeruje etykiety (bug / feature / docs). Sprawdza czy nie ma duplikatu wśród otwartych issues.
💬 komentarz
Automatyczny komentarz z sugestią etykiet i linkiem do ewentualnego duplikatu.
Gdy team ma dużo issues i triage zajmuje za dużo czasu.
repo event
Nowy PR otwarty pull_request: [opened]
Czyta diff PR. Sprawdza czy zmiany mają pokrycie testami. Weryfikuje czy opis PR jest kompletny (co zmieniono, dlaczego, jak testować). Ostrzega przed naruszeniami architektury.
💬 komentarz
Review checklist: ✅/❌ przy każdym kryterium, z konkretnym feedbackiem.
Gdy chcesz żeby każdy PR miał wstępne review zanim zajmie się nim człowiek.
slash command
Komentarz w PR /security-check
Analizuje zmienione pliki pod kątem OWASP Top 10. Szuka: SQL injection przez raw queries, brak autoryzacji na endpointach, sekrety w kodzie, otwarte CORS.
💬 komentarz
Lista potencjalnych problemów bezpieczeństwa z poziomami CRITICAL / HIGH / LOW.
Gdy nie masz dedykowanego security review a chcesz podstawowego skanowania.
schedule
Codziennie rano daily on weekdays at 8am
Przegląda otwarte issues i PR-y. Identyfikuje te bez aktywności przez 7+ dni. Generuje podsumowanie: co stoi, kto jest blokowany, co można zamknąć.
📋 issue
Dzienny raport "Backlog Health" z listą zablokowanych zadań i sugestiami akcji.
Gdy daily standup traci czas na sprawdzanie co stoi w backlogu.
schedule
Co poniedziałek every monday at 9am
Analizuje commity z ostatniego tygodnia. Identyfikuje które moduły były modyfikowane najczęściej. Sprawdza trend: rośnie liczba bugów czy spada?
📊 raport
Tygodniowy raport velocity z trendem bugów i listą "hot modules" które wymagają uwagi.
Gdy chcesz mieć automatyczne dane do retrospektywy bez ręcznego zbierania.
repo event
Push do main push: [main]
Sprawdza czy zmiany w *.cs mają odpowiadające zmiany w plikach testowych. Jeśli nie – identyfikuje które metody publiczne nie są pokryte testami.
📋 issue
Issue "Brakujące testy po merge" z listą klas i metod bez pokrycia testowego.
Gdy pokrycie testami spada i chcesz reagować od razu, nie przy następnym sprint review.
slash command
Komentarz w issue /estimate
Analizuje opis issue. Szuka podobnych historycznych tasków w zamkniętych issues. Proponuje estymację w punktach story (1/2/3/5/8/13) z uzasadnieniem i listą ryzyk.
💬 komentarz
Propozycja estymacji z uzasadnieniem i pytaniami które warto doprecyzować przed planowaniem.
Gdy planning poker zjada za dużo czasu na wstępne estymacje.
schedule
Raz w miesiącu on the 1st of every month
Sprawdza pliki *.csproj pod kątem zależności NuGet. Identyfikuje paczki z dostępnymi nowymi wersjami i paczki z known vulnerabilities (przez GitHub Advisory Database).
📋 issue
Issue "Monthly dependency audit" z tabelką: paczka → obecna wersja → nowa wersja → czy jest CVE.
Gdy dependency update jest zawsze "na potem" i nagle okazuje się że projekt ma 6-miesięczne długi.
🔍 Jak czytać tabelkę i wybierać co wdrożyć pierwsze
Jeśli dopiero zaczynasz z Agentic Workflows – zacznij od jednego, prostego workflow. Najlepsze na start: triage nowych issues (szybki efekt, mało ryzyka, nie pisze kodu – tylko komentuje) lub dzienny raport backlogu (całkowicie read-only, zero możliwości wyrządzenia szkody). Slash commands jak /security-check zostawiaj na później – wymagają więcej testowania żeby nie generować false positives.
Gotowy workflow – dzienny raport dla .NET projektu
Poniżej kompletny, gotowy do wklejenia workflow który implementuje "dzienny raport backlogu" z tabelki powyżej. To dobry punkt startowy bo jest całkowicie read-only – agent tylko czyta i komentuje, nie może nic zepsuć.
.github/ └── workflows/ ├── daily-backlog-report.md ← Twoje źródło (edytujesz tutaj) └── daily-backlog-report.lock.yml ← generowany przez gh aw compile
---
name: "Daily .NET Backlog Report"
description: >
Codziennie rano generuje raport stanu backlogu dla projektu .NET.
Identyfikuje zablokowane PR-y, stale issues i propozycje akcji dla teamu.
on:
schedule: daily on weekdays at 8am UTC
permissions:
contents: read
issues: write
pull-requests: read
safe-outputs:
create-issue:
title-prefix: "[daily-report] "
labels: [automated-report, backlog]
---
## Cel
Wygeneruj dzienny raport stanu backlogu repozytorium. Raport ma pomóc
teamowi szybko zorientować się co stoi, kto jest zablokowany i na co
zwrócić uwagę podczas daily standup.
## Instrukcje krok po kroku
### 1. Zbierz dane o otwartych issues
Przejrzyj wszystkie otwarte issues. Dla każdego issue zanotuj:
- tytuł i numer
- etykiety
- przypisaną osobę (assignee) lub brak
- datę ostatniego komentarza lub aktywności
### 2. Zbierz dane o otwartych Pull Requestach
Przejrzyj wszystkie otwarte PR-y. Dla każdego zanotuj:
- tytuł i numer
- autora
- liczbę dni od otwarcia
- status review (approved / changes requested / brak review)
- czy CI przechodzi
### 3. Identyfikuj problemy
Na podstawie zebranych danych zidentyfikuj:
**Stale issues** – otwarte issues bez aktywności przez 7 lub więcej dni.
Podaj ich listę z numerami i datami ostatniej aktywności.
**Zablokowane PR-y** – PR-y otwarte ponad 3 dni bez review lub
z requested changes bez odpowiedzi autora. Podaj listę.
**Nieprzypisane issues z etykietą "bug"** – bugi bez assignee
to potencjalne zagrożenia dla jakości. Wylistuj je osobno.
**PR-y z nieudanym CI** – PR-y gdzie pipeline się nie udał
a autor jeszcze nie zareagował (brak aktywności ponad 24h).
### 4. Przygotuj raport
Stwórz issue z raportem według poniższego formatu. Tytuł issue:
`[daily-report] Backlog Health – {data w formacie YYYY-MM-DD}`
Treść issue powinna zawierać:
```
## 📊 Backlog Health – {data}
### Stale Issues ({liczba})
| # | Tytuł | Ostatnia aktywność | Assignee |
|---|-------|--------------------|----------|
...
### Zablokowane PR-y ({liczba})
| # | Tytuł | Dni otwarty | Status review |
|---|-------|-------------|---------------|
...
### Nieprzypisane bugi ({liczba})
| # | Tytuł | Etykiety |
|---|-------|----------|
...
### PR-y z nieudanym CI ({liczba})
| # | Tytuł | Autor | Dni od awarii |
|---|-------|-------|---------------|
...
### 💡 Sugestie akcji
{3-5 konkretnych sugestii co team powinien zrobić dziś na podstawie danych}
```
Jeśli któraś sekcja jest pusta (np. brak stale issues) – napisz
"✅ Brak problemów w tej kategorii" zamiast pustej tabeli.
### 5. Nie twórz raportu jeśli brak problemów
Jeśli wszystkie cztery kategorie są puste – nie twórz issue.
Zamiast tego zakończ workflow z komunikatem sukcesu w logach:
"✅ Backlog w dobrym stanie – raport pominięty."
Drugi przykład – triage nowych issues, wywołany zdarzeniem:
📄.github/workflows/issue-triage.mdissues: opened
---
name: "Issue Auto-Triage"
description: >
Automatycznie analizuje nowe issues w projekcie .NET. Sugeruje etykiety,
sprawdza duplikaty i prosi o brakujące informacje gdy opis jest niepełny.
on:
issues:
types: [opened]
permissions:
contents: read
issues: write
safe-outputs:
add-issue-comment: true
---
## Cel
Przeanalizuj nowo otwarte issue i zostaw pomocny komentarz który:
1. Potwierdza że issue zostało odebrane
2. Sugeruje odpowiednie etykiety
3. Sprawdza czy nie ma duplikatu
4. Prosi o dodatkowe informacje jeśli opis jest niepełny
## Instrukcje
### 1. Przeczytaj issue
Przeczytaj tytuł i treść nowego issue.
### 2. Określ typ
Na podstawie treści oceń czy to:
- **bug** – coś nie działa jak powinno
- **feature** – nowa funkcjonalność
- **question** – pytanie o działanie systemu
- **docs** – problem z dokumentacją
- **chore** – maintenance, dependency update itp.
### 3. Sprawdź duplikaty
Przeszukaj ostatnie 50 otwartych i zamkniętych issues pod kątem
podobnych tytułów lub opisów. Jeśli znajdziesz potencjalny duplikat
– zanotuj jego numer.
### 4. Oceń kompletność opisu
Dla bugow sprawdź czy issue zawiera:
- opis problemu (co się dzieje)
- oczekiwane zachowanie (co powinno się dziać)
- kroki do reprodukcji
Dla feature requestów sprawdź czy jest:
- opis przypadku użycia (po co to potrzebne)
- propozycja rozwiązania lub oczekiwane zachowanie
### 5. Zostaw komentarz
Napisz przyjazny komentarz po polsku według szablonu:
```
Dziękuję za zgłoszenie! 🙏
**Proponowane etykiety:** {lista etykiet}
{Jeśli duplikat: "**Możliwy duplikat:** #{numer} – {tytuł}"}
{Jeśli opis jest kompletny:
"Opis wygląda kompletnie, przekazuję do teamu."}
{Jeśli opis jest niekompletny:
"Żeby szybciej pomóc, czy możesz uzupełnić:
- {brakujący element 1}
- {brakujący element 2}"}
```
Bądź zwięzły i przyjazny. Nie komentuj spraw oczywistych.
Nie używaj markdown w komentarzu poza pogrubionymi nagłówkami.
Instalacja CLI i pierwsze uruchomienie
Do pracy z Agentic Workflows potrzebujesz rozszerzenia gh aw dla GitHub CLI.
1
Zainstaluj GitHub CLI i rozszerzenie gh aw
# Zainstaluj gh CLI jeśli jeszcze nie masz:
# https://cli.github.com
# Zainstaluj rozszerzenie agentic workflows:
gh extension install github/gh-aw
# Sprawdź że działa:
gh aw --version
2
Stwórz plik .md w .github/workflows/
Wklej jeden z szablonów powyżej. Dostosuj instrukcje do swojego projektu – zmień nazwy projektów, godziny, kryteria.
3
Skompiluj do .lock.yml
# Walidacja bez generowania pliku:
gh aw compile --validate --no-emit .github/workflows/daily-backlog-report.md
# Kompilacja – generuje .lock.yml obok pliku .md:
gh aw compile
# Uruchom workflow bez czekania na trigger:
gh aw run daily-backlog-report
# Obserwuj status:
gh aw status
# Przejrzyj logi jeśli coś nie gra:
gh aw logs daily-backlog-report
⚠️ Wymagania po stronie repozytorium
Żeby Copilot Coding Agent mógł uruchamiać workflows, w repozytorium musi być włączona opcja "Allow GitHub Copilot to create and approve pull requests" (Settings → Actions → General → Workflow permissions). Dla Copilot Business/Enterprise admin organizacji musi też włączyć Agentic Workflows w ustawieniach organizacji.
Bezpieczeństwo i dobre praktyki
Least-privilege permissions – zawsze
Definiuj tylko uprawnienia których workflow faktycznie potrzebuje. Jeśli tylko czyta issues i pisze komentarze – issues: write i contents: read wystarczy. Nie dawaj contents: write jeśli workflow nie musi modyfikować kodu – to otwiera możliwość na modyfikację plików przez prompt injection w treści issue.
safe-outputs jako guardrail
Pole safe-outputs to Twój ostatni bastion kontroli. Nawet jeśli ktoś wstrzyknie sprytny prompt do treści issue próbując skłonić agenta do tworzenia issues ze złośliwym tytułem – title-prefix w safe-outputs gwarantuje że każdy issue stworzony przez workflow zacznie się od Twojego prefiksu. Łatwo go potem wyfiltrować lub usunąć.
Zacznij read-only, rozszerzaj stopniowo
Pierwszy workflow w projekcie powinien być całkowicie read-only (tylko contents: read, issues: read). Gdy masz pewność że działa jak oczekujesz – dodaj uprawnienie do komentowania. Dopiero gdy to jest stabilne – rozważ tworzenie issues lub PR-ów.
Edytuj .md, nie .lock.yml
Plik .lock.yml jest generowany automatycznie i nie powinien być edytowany ręcznie. Wszelkie zmiany rób w pliku .md, a następnie rekompilujesz przez gh aw compile. PR review dotyczy zmian w .md – to jest czytelny diff który można sensownie zreviewować.
Wklej plik daily-backlog-report.md do .github/workflows/
Zmień godzinę na 5 minut w przyszłość żeby szybko przetestować: schedule: at HH:MM UTC
Skompiluj: gh aw compile → scommituj oba pliki → pushuj
Obserwuj wykonanie: gh aw status albo zakładka Actions na GitHubie
Sprawdź czy issue z raportem pojawiło się w repozytorium. Przywróć godzinę na 8am.
Podsumowanie
Agentic Workflows zamykają pętlę całego cyklu. Masz teraz wszystkie warstwy: instrukcje kształtują zachowanie agenta, skills dają mu wyspecjalizowane zdolności, agenci orkiestrują złożone zadania, MCP serwery łączą z zewnętrznymi narzędziami, hooks pilnują jakości w trakcie pracy, a workflows działają autonomicznie gdy Cię nie ma.
✅ Agentic Workflows ≠ GitHub Actions – piszesz Markdown z naturalnymi instrukcjami, gh aw compile generuje Actions YAML. Edytujesz .md, nie YAML.
✅ Cztery typy triggerów: schedule (naturalny język, nie cron!), zdarzenia repo, slash commands i ręczne uruchomienie.
✅ safe-outputs to obowiązek – definiuj co agent może tworzyć. Prefiks tytułu i etykiety to minimum dla każdego workflow który tworzy issues.
✅ Schemat dla .NET projektu – osiem gotowych workflowów: triage issues, review PR, security check, dzienny raport, tygodniowy raport velocity, pokrycie testami, estymacja i dependency audit.
✅ Dwa gotowe pliki .md: daily backlog report i issue auto-triage – skopiuj, dostosuj nazwy, skompiluj, commituj.
✅ Zacznij read-only – pierwszy workflow tylko czyta. Uprawnienia do zapisu dodajesz gdy masz pewność że workflow działa zgodnie z oczekiwaniami.
W kolejnym wpisie wchodzimy w szczegóły tego co napędza autonomiczne workflows: Copilot Coding Agent w praktyce – jak przypisywać go do issues, jak monitorować postęp i jak skutecznie reviewować jego pracę.