Masz agentów AI którzy piszą kod. Ale w git log wszystko wygląda tak: "Adam Kowalski — 50 commitów". Nie wiadomo co zrobił człowiek, a co AI. Nie wiadomo który agent pracował nad czym.
Rozwiązanie: każdy agent ma tożsamość w git. Własne imię, email, branch. Git log wygląda tak: "Backer zrobił endpoint, Frontik zrobił UI, Securitor sprawdził bezpieczeństwo". Jak prawdziwy zespół.
Branching strategy
master ─────────────────────────── produkcja (chroniony)
│
└─ develop ──────────────────── integracja (chroniony)
│
├─ feature/chat-backend ── agent Backer
├─ feature/chat-frontend ── agent Frontik
├─ feature/chat-tests ──── agent Testor
└─ docs/chat ──────────── agent Doktor
| Branch | Kto pushuje | Jak się dostaje do master |
|---|---|---|
master | Tylko Ty (approve) | Merge z develop |
develop | Lider (merge PR-ów) | PR do master |
feature/* | Agenci | PR do develop |
docs/* | Doktor | PR do develop |
Otwórz terminal i utwórz branche:
# Utwórz branch develop git checkout -b develop git push -u origin develop # Wróć na master git checkout master
Tożsamość agenta w git
Każdy agent commituje pod swoim imieniem. W git log od razu widać kto co zrobił:
| Agent | Git author | |
|---|---|---|
| Claude Lider | 🤖 Claude Lider (AI Lead) | claude@twoja-firma.ai |
| Backer | 🤖 Backer (AI Agent) | backer@twoja-firma.ai |
| Frontik | 🤖 Frontik (AI Agent) | frontik@twoja-firma.ai |
| Securitor | 🤖 Securitor (AI Agent) | securitor@twoja-firma.ai |
| Doktor | 🤖 Doktor (AI Agent) | doktor@twoja-firma.ai |
🤖 na początku nazwy — od razu widać w git log że to AI, nie człowiek. @firma.ai odróżnia agentów od ludzi (@firma.pl). Domena nie musi istnieć — to tylko identyfikator.
Skrypt agent-commit.sh
Zamiast za każdym razem wpisywać --author="..." — stwórz skrypt:
#!/bin/bash # Użycie: ./scripts/agent-commit.sh backer "feat: nowy endpoint" get_agent_info() { case "${1,,}" in lider) AUTHOR_NAME="🤖 Claude Lider (AI Lead)" AUTHOR_EMAIL="claude@twoja-firma.ai" ;; backer) AUTHOR_NAME="🤖 Backer (AI Agent)" AUTHOR_EMAIL="backer@twoja-firma.ai" ;; frontik) AUTHOR_NAME="🤖 Frontik (AI Agent)" AUTHOR_EMAIL="frontik@twoja-firma.ai" ;; securitor) AUTHOR_NAME="🤖 Securitor (AI Agent)" AUTHOR_EMAIL="securitor@twoja-firma.ai" ;; doktor) AUTHOR_NAME="🤖 Doktor (AI Agent)" AUTHOR_EMAIL="doktor@twoja-firma.ai" ;; *) echo "Nieznany agent: $1"; exit 1 ;; esac } AGENT_ID="$1"; shift; COMMIT_MSG="$*" get_agent_info "$AGENT_ID" git commit \ --author="${AUTHOR_NAME} <${AUTHOR_EMAIL}>" \ -m "${COMMIT_MSG}" echo "Commit jako ${AUTHOR_NAME}"
# Nadaj uprawnienia chmod +x scripts/agent-commit.sh # Commit jako Backer git add api/endpoint.php ./scripts/agent-commit.sh backer "feat(api): nowy endpoint SSE" # Commit jako Frontik git add js/widget.js ./scripts/agent-commit.sh frontik "feat(chat): EventSource streaming"
macOS domyślnie ma starą wersję bash (3.x) gdzie declare -A (tablice asocjacyjne) nie działa. Dlatego używamy case/esac zamiast tablic — działa wszędzie.
PR workflow — od brancha do merge
# 1. Utwórz branch git checkout develop git checkout -b feature/chat-backend # 2. Napisz kod, dodaj pliki git add api/ai-chat-stream.php # 3. Commit jako agent ./scripts/agent-commit.sh backer "feat(chat): SSE endpoint" # 4. Push na GitHub git push -u origin feature/chat-backend # 5. Utwórz PR gh pr create \ --base develop \ --title "feat: SSE endpoint — Backer" \ --body "## Zmiany - Server-Sent Events z Claude API - Rate limiting 30 req/min 🤖 Generated by AI Agent"
Git log wygląda tak:
* merge: chat streaming (#5) Ty
├* feat: EventSource + UI 🤖 Frontik
├* feat: SSE endpoint 🤖 Backer
├* docs: dokumentacja chat 🤖 Doktor
* poprzedni commit 🤖 Claude Lider
Conventional commits — format wiadomości
<typ>(scope): krótki opis - szczegół 1 - szczegół 2 Co-Authored-By: 🤖 Claude Lider (AI Lead) <claude@firma.ai>
| Typ | Kiedy | Przykład |
|---|---|---|
feat | Nowa funkcja | feat(chat): SSE streaming |
fix | Naprawa błędu | fix(auth): timeout sesji |
docs | Dokumentacja | docs: aktualizacja CLAUDE.md |
refactor | Refaktoryzacja | refactor(api): wydzielenie klasy |
sec | Bezpieczeństwo | sec: CSP nonce na inline scripts |
Dodaj Co-Authored-By: z imieniem lidera — GitHub pokaże obu autorów w PR. Widać kto koordynował, kto wykonywał.
Pułapki
Zasada: 1 plik = 1 agent. Jeśli Backer i Frontik edytują ten sam plik — będzie konflikt przy merge. Podział plików w planie zadania PRZED uruchomieniem agentów.
NIGDY nie pozwalaj agentom na git push --force. Dodaj do deny list w settings.json. Force push na cudzym branchu = utrata kodu.