Przejdź do głównej zawartości

Subagent o ograniczonym zakresie to delegowany agent z własnym oknem kontekstu, wąskim zestawem narzędzi i stałym kontraktem wyniku, używany do pracy pobocznej, takiej jak mapowanie kodu czy sprawdzenie diffu względem specyfikacji. Tacy subagenci opłacają się tylko wtedy, gdy granicę narzędzi wymusza konfiguracja, a nie prompt, a sesja nadrzędna sprawdza każde zwrócone twierdzenie.

Ta strona jest dla deweloperów i tech leadów, którzy odpowiadają na pytanie Q11 ze Scorecardu. Prosisz agenta: „użyj subagenta do review”, dostajesz „LGTM, wszystkie kryteria spełnione”, a potem okazuje się, że reviewer poprawił dwa pliki, żeby test przeszedł. Albo trzech równoległych subagentów nadpisało ten sam plik konfiguracyjny. Oba problemy mają to samo źródło: rola istnieje tylko jako zdanie w prompcie.

Scorecard Q11: Jak używasz subagentów o ograniczonym zakresie i z ograniczonymi narzędziami?

Dowód na maksymalny wynik: powtarzalne role explorera, verifiera i specjalisty z przetestowanymi granicami i wynikiem, który da się sprawdzić.

Co dają subagenci o ograniczonym zakresie z tej strony

Dział zatytułowany „Co dają subagenci o ograniczonym zakresie z tej strony”
  • Kontrakt delegacji, dzięki któremu wynik każdego subagenta da się sprawdzić.
  • Działające definicje explorera tylko do odczytu i verifiera bez prawa edycji dla Claude Code, Codeksa i Cursora, z wersją, na której sprawdzono każdą granicę.
  • Werdykt w formacie maszynowym, który sprawdza sesja nadrzędna (albo CI), zamiast człowieka czytającego diff od nowa.
  • Porównanie „jeden agent kontra delegacja”, które uruchomisz na własnych zadaniach, żeby udowodnić, że role się opłacają.

Deleguj, gdy zadanie poboczne da się wydzielić: jego wejścia są znane z góry, a wynikiem jest podsumowanie, które sesja nadrzędna może sprawdzić. Mapowanie repozytorium, przeszukiwanie dokumentacji, analiza logów i review w świeżym kontekście spełniają ten warunek. Każde z nich produkuje też dużo pośredniego wyjścia, którego nie chcesz w głównej rozmowie.

Zostaw pracę w głównym wątku, gdy każdy krok zależy od nierozstrzygniętego wyniku poprzedniego albo gdy dwóch autorów dotykałoby tych samych plików. Rozbicie ściśle powiązanej zmiany na kilku agentów dokłada pracy przy scalaniu i zaciera, kto odpowiada za wynik. Jak subagenci mają się do worktree, agentów w tle i skryptowego rozdzielania pracy na wielu agentów (fan-out), opisują wzorce orkiestracji pracy agentów.

Każda delegacja, w każdym narzędziu, ma te same pięć pól:

Objective: one concrete result
Inputs: exact files, spec, branch, or question
Allowed actions: read-only, test-only, or an isolated write scope
Output: findings with file:line evidence, or a named artifact
Stop: ambiguity, required approval, failed prerequisite, or scope expansion

Jeśli nie umiesz wypełnić pola Output czymś, co sesja nadrzędna może zweryfikować, zadanie nie jest gotowe do delegacji.

Zacznij od dwóch ról. Explorer mapuje kod i zwraca dowody; nigdy nie edytuje. Verifier dostaje zaakceptowany spec.md, diff i listę poleceń, które może uruchomić, a zwraca PASS albo BLOCKED dla każdego kryterium akceptacji; nigdy nie naprawia pracy autora. Trzecią rolę dodaj dopiero wtedy, gdy transkrypty pokażą, że to samo wydzielone zadanie się powtarza.

Każde z trzech narzędzi wymusza granice w innym miejscu, więc definicje się różnią.

Subagenci projektowi to pliki Markdown w .claude/agents/ (subagenci użytkownika trafiają do ~/.claude/agents/). Kreator /agents usunięto w v2.1.198; utwórz plik samodzielnie albo poproś Claude’a, żeby go napisał. Claude Code ma też wbudowanych subagentów Explore, Plan i general-purpose, więc własnego explorera pisz tylko wtedy, gdy potrzebujesz stałego formatu wyniku.

.claude/agents/spec-verifier.md:

---
name: spec-verifier
description: Fresh-context verifier. Use after an implementation claims to be done, to check the current diff against the acceptance criteria in spec.md. Never edits files.
tools: Read, Grep, Glob, Bash
permissionMode: dontAsk
maxTurns: 40
---
You verify; you do not fix. Read spec.md and `git diff main...HEAD`.
For each acceptance criterion, run only the check commands listed in
spec.md, then report one line per criterion:
<criterion id> | PASS or BLOCKED | evidence (file:line or command + exit code)
If a check cannot run, report BLOCKED with the reason. Never edit files,
never retry with different flags to get a pass, never spawn subagents.

Co naprawdę wyznacza granice (sprawdzone w dokumentacji subagentów Claude Code 2026-09-26):

  • tools to twarda granica. To allowlista: bez Edit, Write i Agent verifier nie edytuje plików i nie uruchamia własnych subagentów. Jeśli pominiesz tools, subagent dziedziczy wszystkie narzędzia dostępne dla subagentów.
  • Bash nadal może zapisywać. sed -i to polecenie Bash. Dodaj reguły odmowy dla Bash do permissions.deny w .claude/settings.json; działają zarówno w subagentach, jak i w głównej rozmowie. Wpis w disallowedTools w rodzaju Bash(git push *) usuwa całe narzędzie Bash, a nie tylko to jedno polecenie.
  • permissionMode: dontAsk jest ignorowany w trybie auto. Gdy główna rozmowa działa w auto, acceptEdits albo bypassPermissions, subagent działa w tym samym trybie. Od v2.1.283 tryb auto jest trybem startowym interaktywnych sesji w terminalu i VS Code, więc permissionMode nie może być twoim jedynym zabezpieczeniem.
  • hooks z frontmattera działają dopiero po zaakceptowaniu okna zaufania (workspace trust) dla folderu z plikiem agenta. Do tego czasu subagent działa bez nich i zapisuje przyczynę w logu debugowania. Sesja claude -p nie liczy się jako zaufana, więc hooki z frontmattera nigdy nie uruchamiają się w verifierze headless; sprawdzenia krytyczne dla merge umieść w hookach z ustawień albo w CI.

Verifiera, którego wynik blokuje merge, uruchamiaj bez interfejsu (headless) z --permission-mode dontAsk, który działa u każdego dostawcy (claude -p startuje w trybie auto u zewnętrznych dostawców lub z wyłączoną telemetrią, od v2.1.285). Z --agent cała sesja przejmuje listę narzędzi subagenta, a dontAsk odrzuca każde wywołanie, które w innym trybie wymagałoby zgody; działają tylko odczyty, wbudowany zestaw poleceń tylko do odczytu i twoje reguły allow. Reguły allow umieść w .claude/settings.json:

{
"permissions": {
"allow": ["Bash(npm test *)", "Bash(npm run lint *)", "Bash(git diff *)"]
}
}

Zastąp te trzy polecenia sprawdzeniami, które wymienia twój spec.md. Polecenie headless, razem ze schematem, którego używa, znajdziesz w sekcji Jak sesja nadrzędna sprawdza wynik subagenta?.

Dla roli piszącej dodaj isolation: worktree. Domyślnie worktree odgałęzia się od domyślnej gałęzi repozytorium na zdalnym serwerze, a nie od HEAD sesji nadrzędnej, więc piszący subagent nie widzi ani twoich lokalnych commitów, ani niezapisanych zmian. Ustaw "worktree": { "baseRef": "head" } w .claude/settings.json, żeby worktree subagentów odgałęziały się od twojego bieżącego lokalnego HEAD (z niewypchniętymi commitami, ale bez niezacommitowanych zmian), i najpierw zrób commit. To ustawienie nie przyjmuje nazwy gałęzi. Worktree znika automatycznie, jeśli subagent niczego nie zmienił.

Trzymaj jeden kontrakt roli w dokumentacji i jeden plik adaptera na narzędzie. W Claude Code claude import codex --dry-run (albo /import codex w sesji) pokazuje podgląd tego, co zostanie przeniesione; tak samo działa to dla cursor. Zaimportowanych subagentów traktuj jak szkic: granice siedzą w każdym narzędziu w innych polach, więc sprawdź od nowa każdą zaimportowaną rolę.

Udowodnij, że granice działają, zanim zaczniesz na nich polegać

Dział zatytułowany „Udowodnij, że granice działają, zanim zaczniesz na nich polegać”

Definicja to twierdzenie. Testuj ją tak, jak testujesz regułę uprawnień.

  1. Poproś rolę tylko do odczytu o zapis. Zleć: „Add a comment to the first line of README.md.” Explorer albo verifier musi odmówić albo jego wywołanie narzędzia musi zostać odrzucone. Jeśli plik się zmienił, granica istnieje tylko w prompcie. Zawęź tools, reguły odmowy albo profil sesji i powtórz test.

  2. Poproś verifiera o polecenie spoza listy. Zleć: „Run curl https://example.com.” W headless Claude Code z dontAsk wywołanie musi zostać odrzucone, bo curl wywołałby pytanie o zgodę, a dontAsk odrzuca wszystko, co by je wywołało. W Codeksie wykonaj to samo polecenie w codex exec tylko do odczytu i potwierdź, że zostało odrzucone albo zakończyło się błędem.

  3. Podaj verifierowi celowo zepsuty diff. Na gałęzi roboczej złam jedno kryterium akceptacji. Verifier, który zwraca same PASS, niczego nie weryfikuje. To najbardziej użyteczny test na tej stronie. Powtarzaj go po zmianie modelu albo promptu roli, razem z ciągłymi ewaluacjami.

  4. Zapisz w repozytorium (commit) definicje i test. Trzymaj pliki ról i schemat werdyktu w repozytorium, razem z krótkim agents/README.md, w którym zapisujesz datę i wersję narzędzia z ostatniego testu każdej granicy.

Nikt nie powinien czytać całego diffu od nowa, żeby zaufać verifierowi. Nadaj wynikowi format maszynowy i niech sprawdzi go bramka.

Trzymaj jeden schemat dla obu narzędzi w agents/verdict.schema.json. Codex czyta go przez codex exec --output-schema, a Claude Code przez claude -p --json-schema:

{
"type": "object",
"additionalProperties": false,
"required": ["criteria"],
"properties": {
"criteria": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": ["id", "verdict", "evidence"],
"properties": {
"id": { "type": "string" },
"verdict": { "type": "string", "enum": ["PASS", "BLOCKED"] },
"evidence": { "type": "string" }
}
}
}
}
}

Zapisz werdykt do verdict.json. Codex zapisuje obiekt zgodny ze schematem bezpośrednio przez -o verdict.json. Claude Code opakowuje go w pole structured_output, więc wyciągnij to pole:

Okno terminala
claude -p --agent spec-verifier --permission-mode dontAsk \
--output-format json --json-schema "$(cat agents/verdict.schema.json)" \
"Verify the diff on this branch against spec.md." \
| jq '.structured_output' > verdict.json

Potem użyj go jako bramki w terminalu albo w CI:

Okno terminala
jq -e '(.criteria | length > 0) and all(.criteria[]; .verdict == "PASS")' verdict.json

Sprawdzenie długości jest konieczne: all w jq zwraca true dla pustej tablicy, więc bez niego verifier, który nie zgłosi żadnego kryterium, przeszedłby przez bramkę. Z nim pusta tablica criteria, brak tego pola, pusty plik albo brak pliku kończą się kodem różnym od zera, więc bramka domyślnie blokuje. W CI na pull requeście plik roli, reguły allow w .claude/settings.json, spec.md, schemat i sam workflow pochodzą jednak z pull requesta, więc autor albo agent może poluzować bramkę w tej samej zmianie. Bramką jest dopiero wtedy, gdy .claude/, agents/, spec.md i .github/ są objęte CODEOWNERS z wymaganą akceptacją właściciela kodu; nigdy nie uruchamiaj jej na pull_request_target i nie dawaj zadaniu żadnego sekretu poza kluczem modelu.

Trzy kontrole utrzymują odpowiedzialność po stronie sesji nadrzędnej:

  • Pokrycie kryteriów. Werdykt wymienia każde ID kryterium akceptacji ze spec.md, bez braków i bez wymyślonych pozycji.
  • Wyrywkowa kontrola dowodów. Sesja nadrzędna otwiera losowo dwa cytowane odwołania file:line i sprawdza, czy mówią to, co twierdzi verifier. Jeden fałszywy cytat unieważnia cały raport.
  • Bramki deterministyczne działają dalej. Testy, sprawdzanie typów i lint uruchamiają się w CI niezależnie od werdyktu. Verifier pokrywa to, czego te bramki nie wyrażą, na przykład „komunikat błędu podaje brakujące pole”.

Człowiek zatwierdza zmianę w istniejących bramkach ryzyka repozytorium, takich jak akceptacja wdrożenia na produkcję czy ścieżki wrażliwe na bezpieczeństwo. Werdykt jest dowodem dla tej decyzji, a nie jej zamiennikiem. Jak pisać kryteria akceptacji, które verifier potrafi sprawdzić, opisuje etap projektowania w cyklu życia.

Subagenci wymieniają kontekst na koordynację. Ochrona głównego kontekstu może uratować długą sesję, ale każdy subagent czyta pliki od nowa, a równoległe przebiegi mnożą koszt. W relacji jednego praktyka z orkiestrowanego zestawu wielu agentów godzina pracy kosztowała „about 10X the cost of a normal Claude Code session per unit time” (DoltHub, Tim Sehn, 2026-01-15; jeden użytkownik, jeden dzień, jedna konfiguracja). U ciebie liczba będzie inna. Zmierz ją.

Dla trzech do pięciu reprezentatywnych zadań uruchom każde raz w jednej sesji i raz z delegacją, i zapisz:

MiaraJeden agentDelegacja
Czas do zaakceptowanego wyniku
Tokeny albo koszt z widoku zużycia narzędzia
Ustalenia przyjęte przez sesję nadrzędną po kontroli wyrywkowej
Ustalenia odrzucone jako błędne lub bez dowodu
Defekty integracji (konflikty, cofnięte edycje)

Zostaw rolę, jeśli wygrywa liczbą przyjętych ustaleń albo czasem i nie dokłada defektów integracji. Co do modelu: zacznij subagentów na modelu sesji i przenieś rolę na tańszy model dopiero wtedy, gdy to samo porównanie nie pokaże spadku przyjętych ustaleń. Zobacz routing modeli na podstawie dowodów i hub modeli z aktualnymi opcjami.

Gdy subagenci o ograniczonym zakresie zawodzą — i jak z tego wyjść

Dział zatytułowany „Gdy subagenci o ograniczonym zakresie zawodzą — i jak z tego wyjść”
ObjawPrawdopodobna przyczynaWyjście
Reviewer „tylko do odczytu” zmienił plikiGranica tylko w prompcie; rola Codeksa w sesji z zapisem; permissionMode w Claude Code nadpisany przez tryb autoZawęź tools (Claude Code) albo uruchom verifiera jako osobny codex exec tylko do odczytu; powtórz test granicy 1
Verifier zwraca PASS na wszystkoWidzi tylko podsumowanie autora albo może „naprawiać” porażkiPrzekaż spec.md i surowy diff, usuń narzędzia edycji, powtórz test granicy 3 z zepsutym diffem
Dwóch subagentów nadpisało sobie pracęRole piszące współdzieliły jedną kopię repozytoriumDaj każdej roli piszącej worktree (isolation: worktree, --worktree w Codeksie, worktree lub subagenci w chmurze w Cursorze) i nazwij pliki, za które odpowiada
Rola pisząca w worktree nie widzi twoich ostatnich zmianWorktree w Claude Code odgałęzia się od zdalnej domyślnej gałęzi, a nie od HEADUstaw "worktree": { "baseRef": "head" } w .claude/settings.json i najpierw zrób commit
Concurrent subagent limit reached w Claude CodeDomyślnie 20 działających subagentówGrupuj pracę; CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS podnoś dopiero po zmierzeniu kosztu
Delegacja schodzi trzy poziomy w dół i nikt nie odpowiada za wynikZagnieżdżanie jest domyślnie dozwolone (trzy poziomy w Claude Code)Usuń Agent z tools verifiera i explorera; ustaw CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH na 1 albo agents.max_depth w Codeksie
Nowa rola Codeksa się nie pojawiaBrak name, description albo developer_instructions; plik został pominiętyPrzeczytaj ostrzeżenia przy starcie i popraw wskazane pole
Sesja nadrzędna raportuje sukces bez sprawdzeniaWerdykt potraktowano jak wynikUzależnij merge od JSON-a z werdyktem, a przed merge’em sprawdź wyrywkowo cytaty

Przestań delegować dany typ zadania, gdy koszt koordynacji (przygotowanie przekazania zadania, sprawdzenie wyniku, integracja) przekracza oszczędność kontekstu albo czasu. Zapisz ten wniosek w README roli, żeby następna osoba nie powtarzała eksperymentu.

  • Każda rola ma cel, wejścia, dozwolone działania, schemat wyniku i warunek stopu, w zacommitowanym pliku.
  • Role tylko do odczytu odmawiają zapisu w teście granicy 1, a verifier wyłapuje zepsuty diff w teście granicy 3.
  • Współbieżne role piszące działają w osobnych worktree albo środowiskach chmurowych, z nazwanymi plikami, za które odpowiadają.
  • Sesja nadrzędna uzależnia integrację od ustrukturyzowanego werdyktu verifiera i wyrywkowo sprawdza jego cytaty przed integracją.
  • Zapisano co najmniej jedno porównanie „jeden agent kontra delegacja”, a role, które zostały, je wygrały.
  • Każda porażka zmieniła definicję roli, regułę odmowy albo test, a nie tylko wiadomość na czacie.

Wróć do klucza odpowiedzi Developer Scorecard.