Przejdź do głównej zawartości

Triki wydajności w codziennej pracy z Claude Code

Triki wydajności w Claude Code to powtarzalne nawyki, które ograniczają zmarnowane tury i tokeny: jedno zadanie na sesję dzięki /rename i /clear, zawężony odczyt plików, niższy poziom wysiłku rozumowania (effort) przy pracy mechanicznej, skróty powłoki oparte na claude -p i wyjście JSON dla skryptów. Łączy je jedna zasada: żaden z nich nie może usunąć bramki testów, która dowodzi wyniku.

Ta strona jest dla deweloperów, którzy już codziennie pracują z Claude Code. Znasz te objawy: sesja, która zaczęła się od poprawki jednego błędu, ma już na karku trzy zadania, każda odpowiedź trwa dłużej, Claude czyta dist/, zanim dotknie jedynego pliku, który wskazałeś, a ten sam prompt „przejrzyj ten diff” wpisujesz dziesięć razy w tygodniu. Poniższe poprawki konfigurujesz w kilka minut, a zwracają się przy każdym zadaniu.

  • Zmierzony punkt wyjścia, dzięki któremu wiesz, czy trik pomógł, czy tylko wydawał się szybszy.
  • Rutynę sesji, która utrzymuje mały kontekst bez utraty pracy: nazwij, przekaż, wyczyść, wznów.
  • Reguły uprawnień i linie w CLAUDE.md, które powstrzymują Claude przed czytaniem plików generowanych i rozwlekłymi podsumowaniami.
  • Sześć skrótów powłoki, które nie przesłaniają prawdziwych poleceń i nie wymagają zatwierdzeń, których nie mogą dostać.
  • Skill /rev-staged, który zastępuje prompt do przeglądu wpisywany co tydzień od nowa.
  • Wyjście dla skryptów z --output-format json i --json-schema, sprawdzane przez jq -e zamiast na oko.
  • Regułę weryfikacji: szybkie, zawężone testy w trakcie iteracji i pełna bramka przed uznaniem zadania za skończone.

Zmierz, zanim cokolwiek zmienisz. Dwa wbudowane polecenia dają liczby (sprawdzone na Claude Code 2.1.283):

PolecenieCo pokazujeDo czego go użyć
/contextBieżące zużycie kontekstu jako kolorowa siatka (/context all ze szczegółami)Zobaczysz, ile okna zajmują CLAUDE.md, definicje narzędzi MCP, odczyty plików i rozmowa
/usageKoszt sesji, limity planu i statystyki aktywności (/cost i /stats to aliasy)Porównasz koszt tego samego rodzaju zadania przed zmianą i po niej

Uruchom /context na początku świeżej sesji i ponownie po typowym zadaniu. Jeśli duża część okna jest zajęta, zanim cokolwiek wpiszesz, rozwiązaniem jest krótszy CLAUDE.md albo mniej serwerów MCP, a nie sprytniejszy prompt — zobacz przycinanie CLAUDE.md i AGENTS.md. Śledzenie wydatków na poziomie zespołu należy do strony o kontroli kosztów.

Kolejność ma znaczenie: każdy krok pozwala zmierzyć następny, a bramka testów trafia na miejsce przed każdym trikiem, który ogranicza sprawdzanie.

KolejnośćNawykKonfiguracjaDlaczego w tym miejscu
1Punkt wyjścia z /context i /usagedwa poleceniaBez niego nie odróżnisz realnej oszczędności od wrażenia
2Bramka testów w CLAUDE.mdtrzy linieKażdy kolejny trik ogranicza pracę; ten zachowuje dowód
3Jedno zadanie na sesjęrutyna, bez konfiguracjiNajwiększa oszczędność kontekstu, za darmo
4Reguły deny dla plików generowanychjeden plik ustawieńEgzekwowane, więc działają, nawet gdy prompt o nich zapomni
5effort i styl wyjściajedno polecenieTanie do sprawdzenia i łatwe do cofnięcia dla pojedynczego zadania
6Skróty powłoki, skille i wyjście JSONedycja profilu powłoki, jeden SKILL.mdZwracają się dopiero wtedy, gdy powtarzasz zadanie co tydzień

Nieaktualny kontekst z poprzedniego zadania sprawia, że każda kolejna tura jest wolniejsza i droższa, a do rozumowania Claude trafiają nieistotne pliki. Poniższa rutyna utrzymuje jedną sesję przy jednym zadaniu i niczego nie gubi.

  1. Nazwij sesję na starcie. Zacznij od claude -n payment-retry albo w trwającej sesji wpisz /rename payment-retry. Nazwa pojawia się w wyborze /resume i w tytule terminala.

  2. Pytania poboczne zadawaj przez /btw. /btw what does the retry decorator in src/lib/http.ts do? odpowiada bez przerywania głównej rozmowy, więc szybkie sprawdzenie nie staje się częścią kontekstu zadania.

  3. Przed zmianą zadania zapisz notatkę przekazania. Użyj promptu poniżej. Notatka przetrwa każde późniejsze /compact czy /clear i jest wejściem dla następnej sesji.

  4. Uruchom /clear. Polecenie zaczyna nową sesję z pustym kontekstem. Poprzednia sesja zostaje na dysku i możesz ją otworzyć z /resume.

  5. Wracaj po nazwie. claude -r payment-retry otwiera wybór sesji przefiltrowany tym wyszukiwaniem; claude -c kontynuuje najnowszą sesję w bieżącym katalogu.

Gdy musisz zostać w jednej długiej sesji, kompaktuj z jawnymi instrukcjami, zamiast czekać na automatyczne kompaktowanie:

/compact Keep: files I edited, the failing test names and their last output, decisions and why. Drop: exploratory file reads, rejected approaches, command output already summarised.

Żeby nie wpisywać tego za każdym razem, dodaj stałą regułę do CLAUDE.md; mechanizm podsumowania czyta ją razem z resztą rozmowy. Strona o kontroli kosztów korzysta z tego samego wzorca:

# Compact instructions
When compacting, preserve test output, error traces, file paths you changed and decisions with their reasons.
Summarise discussion. Drop exploratory reads that led to no change.

W nowej sesji zacznij od: Read .claude/handoff.md, run the proving command first, and tell me if the result differs from the note before you continue. Jeśli nie chcesz commitować notatki, dopisz .claude/handoff.md do .git/info/exclude. Jeśli wolisz zainstalować gotową procedurę przekazania zamiast utrzymywać ten prompt, zajrzyj do skilli do dyscypliny kontekstu i tokenów.

Jak powstrzymać Claude przed czytaniem zbędnych plików

Dział zatytułowany „Jak powstrzymać Claude przed czytaniem zbędnych plików”

Claude Code najpierw eksploruje, potem edytuje. To dobre przy nieznanym kodzie i marnotrawne przy wskazanym z nazwy błędzie. Zawęź zadanie w prompcie, a pliki generowane odgrodź w ustawieniach, żeby reguła działała także wtedy, gdy prompt o niej zapomni.

Odgrodź pliki generowane regułami uprawnień. Reguła deny Read(...) w .claude/settings.json nie pozwala narzędziom plikowym otwierać tych ścieżek; ten plik możesz commitować, żeby dostał go cały zespół:

{
"permissions": {
"deny": [
"Read(./dist/**)",
"Read(./build/**)",
"Read(./coverage/**)",
"Read(./package-lock.json)"
]
}
}

Reguła deny jest egzekwowana; linia w CLAUDE.md w rodzaju „nigdy nie czytaj dist/” to tylko wskazówka. Regułę stosuj do wszystkiego, czego nigdy nie chcesz w kontekście, a CLAUDE.md zostaw dla zachowania. Gdzie trafia która instrukcja, opisuje strona o pamięci i CLAUDE.md.

Utnij końcowe podsumowanie. Uruchom /output-style i wybierz Concise (jeden z czterech wbudowanych stylów) albo dodaj jedną linię do CLAUDE.md:

After a change, do not summarise it. Show the changed file paths and the test command you ran with its result.

Dopasuj effort do zadania. Claude Opus 5.5, domyślny model Claude Code od wersji 2.1.280 w kanale wydań latest, pracuje na poziomie effort medium (kanał stable wciąż startuje ze starszym modelem domyślnym; /model pokaże, co masz). Przy zmianach mechanicznych (zmiana nazw, formatowanie, boilerplate) zejdź na low przez /effort low albo claude --effort low, a gdy Claude coś przeoczy, podnieś na high, zanim w ogóle rozważysz inny model. Przegląd modeli wymienia aktualne modele i mówi, kiedy je zmieniać.

Skróty powłoki, które oszczędzają czas bezpiecznie

Dział zatytułowany „Skróty powłoki, które oszczędzają czas bezpiecznie”

O tym, czy skrót oszczędza czas, czy sprawia kłopoty, decydują dwa szczegóły. Po pierwsze, każdej nazwie nadaj prefiks: popularny alias cc='claude -c' przesłania w twojej powłoce kompilator C. Po drugie, uruchomienie claude -p startuje w trybie uprawnień Manual i nie ma nikogo, kto zatwierdziłby edycję, więc jednorazowe skróty zostają tylko do odczytu, a wszystko, co zapisuje pliki, otwiera sesję interaktywną.

Okno terminala
# ~/.zshrc or ~/.bashrc — every name starts with "cl" so nothing shadows a real command
alias clq='claude -p' # one-shot, read-only question
alias clc='claude -c' # continue the latest session in this directory
alias clr='claude -r' # resume picker; clr payment-retry filters by name
# Review the staged diff; reports only, never edits
clrev() {
git diff --cached | claude -p "Review this staged diff. Report only bugs, security issues and missing tests, each with file:line. If there are none, reply 'No findings' and nothing else."
}
# Explain a file and its blast radius
clexplain() {
claude -p "Explain what $1 does, which modules call it, and what breaks if its exported functions change. Read only $1 and the files that import it."
}
# Write tests: interactive, because it edits files and runs them
cltest() {
claude -n "tests-$(basename "$1")" "Write tests for $1 following the nearest existing test file. Run them and show me the output."
}

Zanim je dodasz, uruchom type clq clc clr clrev clexplain cltest i upewnij się, że każda nazwa zwraca „not found”. Przekazywanie potokiem wyjścia buildów i testów do Claude opisuje strona o mistrzostwie w terminalu.

Skrót powłoki działa poza sesją; wewnątrz sesji ten sam prompt powinien być skillem. Zapisz poniższy plik jako .claude/skills/rev-staged/SKILL.md i zacommituj go, a każdy w zespole dostanie /rev-staged z identycznym brzmieniem (format skilla sprawdzony na Claude Code 2.1.283):

---
description: Review the staged diff for bugs, security issues and missing tests
disable-model-invocation: true
allowed-tools: Bash(git diff *)
---
Review this staged diff. Report only bugs, security issues and missing tests,
each with file:line. If there are none, reply "No findings" and nothing else.
!`git diff --cached`

O zachowaniu skilla decydują trzy linie:

  • Linia !`git diff --cached` uruchamia się, zanim Claude zobaczy skill, więc diff przychodzi wklejony w treść i Claude nie traci tury na jego pobranie.
  • disable-model-invocation: true sprawia, że skill uruchamiasz tylko ty, a do tego czasu nie ma go w kontekście Claude, więc w sesjach, które go nie używają, nie kosztuje żadnych tokenów.
  • allowed-tools z góry zatwierdza wstrzyknięte git diff na czas tego jednego wywołania; bez tego wstrzyknięcie może się zatrzymać i czekać na zgodę.

Błędy we frontmatterze nie dają żadnego komunikatu, dlatego strona o własnych poleceniach i skillach dodaje lint plików skilli w CI. Skill wybierz, gdy prompt działa w trakcie sesji, a skrót powłoki, gdy chcesz odpowiedzi bez otwierania sesji.

Gdy odpowiedź Claude zasila kolejne polecenie, poproś o JSON i sprawdź jego kształt mechanicznie. --output-format działa tylko z -p.

Okno terminala
# Plain answer as a string: read .result
claude -p "List every HTTP route in src/api with its method and handler file, one per line." \
--output-format json | jq -r '.result'

Jeśli potrzebujesz pól, na których możesz polegać, dodaj --json-schema. Zwalidowany obiekt trafia do structured_output, obok metadanych uruchomienia:

Okno terminala
claude -p "Find source files in src/api that have no matching test file." \
--output-format json \
--max-budget-usd 1 \
--json-schema '{"type":"object","properties":{"untested":{"type":"array","items":{"type":"string"}}},"required":["untested"]}' \
> untested.json
jq -e '.structured_output.untested | type == "array"' untested.json >/dev/null \
&& jq -r '.structured_output.untested[]' untested.json

jq -e kończy się kodem różnym od zera, gdy sprawdzenie nie przejdzie, więc skrypt zatrzymuje się, zamiast działać na zniekształconej odpowiedzi. --max-budget-usd ogranicza koszt uruchomienia w trybie print, które wymknęło się spod kontroli, a ten sam JSON zawiera total_cost_usd, jeśli chcesz go logować. Zadania CI i większe potoki opisuje strona o automatyzacji Claude Code.

Najbardziej kuszący trik to przestać uruchamiać testy. Rób to tylko w poniższej formie: zawężone testy w trakcie iteracji, pełna bramka, zanim cokolwiek zostanie uznane za skończone. Wtedy weryfikujesz zachowanie na podstawie wyniku testów, a nie czytając każdej zmienionej linii.

# Test scope (CLAUDE.md)
- While iterating, run only the tests for files you changed: npx vitest run <path>
- Before you say a task is done, run: npm run typecheck && npm run lint && npm test
- Report each command with its exit status. Never call a task done with a failing or skipped test.

Tę regułę wspierają trzy warstwy:

  • Hook Stop może uruchamiać bramkę automatycznie, gdy Claude kończy turę, więc reguła nie zależy już od tego, czy model o niej pamięta. Zobacz automatyzację hookami.
  • /code-review przed commitem daje drugie przejście nastawione na błędy, nie na styl. Zobacz automatyzację code review.
  • CI uruchamia te same polecenia, więc lokalny skrót nigdy nie jest ostatnią kontrolą.

Wszystkie poniższe flagi pochodzą z claude --help w wersji 2.1.283.

Okno terminala
# Give Claude tool access to a sibling repository in the same session
claude --add-dir ../shared-components
# Fall back to other models when the primary is overloaded or unavailable
claude --model opus --fallback-model sonnet
# Resume the session linked to pull request 123 (or pick from linked sessions)
claude --from-pr 123

--fallback-model przyjmuje listę rozdzieloną przecinkami i ponawia próbę z modelem głównym na początku każdej tury użytkownika, więc zastępstwo trwa jedną turę, a nie całą sesję. Jeśli tura na modelu zapasowym dała słabszą odpowiedź, powtórz ten krok, gdy model główny wróci. Więcej flag i poleceń zbierają strony funkcje, których jeszcze nie próbowałeś i mistrzostwo w poleceniach slash.

Kiedy triki wydajności w Claude Code obracają się przeciwko tobie

Dział zatytułowany „Kiedy triki wydajności w Claude Code obracają się przeciwko tobie”
ObjawPrzyczynaJak wyjść
cc (lub inny krótki alias) uruchamia Claude zamiast oczekiwanego narzędziaAlias przesłania istniejące polecenieunalias cc, nadaj skrótom unikalny prefiks, sprawdź przez type
Skrót nie zwraca nic przydatnego albo pisze, że nie mógł edytowaćclaude -p startuje w trybie Manual i nie dostanie zatwierdzeniaSkróty z -p trzymaj tylko do odczytu; te, które edytują, uruchamiaj interaktywnie
Wyczyściłeś nie tę sesję/clear poszło przed notatką przekazania/resume i wybierz starą sesję po nazwie; /rewind też potrafi wrócić do stanu sprzed /clear
Po /compact Claude zapomina decyzję albo znów czyta plikiPodsumowanie ją pominęłoPowtórz ją raz, a potem dopisz do instrukcji kompaktowania lub notatki przekazania
Claude edytuje bez czytania wywołujących i je psujeReguły zawężenia są za ciasne dla tego zadaniaPoszerz prompt dla tego zadania („read callers of formatInvoiceTotal”); reguły deny zostaw tylko dla plików generowanych
Zawężone testy przechodzą, CI padaZmiana zepsuła kod poza testowaną ścieżkąTrzymaj pełną bramkę w CLAUDE.md i hook Stop; nigdy nie pozwól, by reguła zawężenia była jedyną regułą
/rev-staged się nie pojawia albo Claude uruchamia go bez pytaniaLiterówka we frontmatterze albo otwierające --- nie jest w pierwszej linii, więc Claude Code go ignorujePopraw plik, uruchom sesję od nowa i dodaj lint skilli ze strony o własnych poleceniach i skillach
Skrypt zadziałał na niedokończonej odpowiedziWyjście parsowane bez schematuDodaj --json-schema i sprawdzenie jq -e przed kolejnym poleceniem