Pętla Read / Edit / Write
Jak Claude Code bezpiecznie zmienia pliki
Pętla Read / Edit / Write to bezpłatna lekcja Claude Architect na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Claude Architect, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Claude Architect zawiera 4 lekcji w sumie.
Dlaczego pętla, a nie magiczna różdżka
Claude Code nigdy po cichu nie przepisuje plików na podstawie samej pamięci. Zmienia kod za pomocą uporządkowanego cyklu trzech wbudowanych narzędzi: Read, Edit i Write.
Ta pętla istnieje z jednego powodu: bezpieczeństwa. Model edytuje wyłącznie tekst, który rzeczywiście wczytał, więc zmiany opierają się na prawdziwym pliku na dysku, a nie na jego zmyślonej wersji.
W tej lekcji dowie się Pan/Pani, jak działa każde narzędzie, kiedy Claude wybiera jedno zamiast innego oraz jakie tryby awarii należy rozpoznawać na egzaminie.
Rodzina wbudowanych narzędzi
Claude Code zawiera niewielki, starannie dobrany zestaw narzędzi do pracy z plikami. Każde z nich ma jasno określone zastosowanie:
- Glob — wyszukiwanie plików według wzorca, np.
**/*.test.tsx - Grep — wyszukiwanie w treści plików
- Read — wczytanie jednego pliku do kontekstu
- Edit — wykonanie precyzyjnej zmiany dla unikalnego dopasowania
- Write — utworzenie pliku lub zastąpienie go w całości
- Bash — uruchamianie poleceń powłoki
Pętla zapisu stanowi sedno tego zestawu: najpierw używa się Read, aby uzyskać podstawę, a następnie Edit lub Write, aby wprowadzić zmianę.
Najpierw Read — zawsze
Read wczytuje bieżącą zawartość pliku do kontekstu modelu. Jest to bezwzględnie wymagany pierwszy krok przed każdą modyfikacją.
Dlaczego? Ponieważ Edit działa przez dopasowanie dokładnego tekstu. Jeśli Claude nie widział pliku, nie może znać dokładnego ciągu do zastąpienia i musiałby zgadywać w kwestii wcięć, importów oraz sąsiednich wierszy.
Oparcie edycji na rzeczywistym pliku sprawia, że zmiana jest poprawna, a nie tylko pozornie wiarygodna.
from anthropic import Anthropic
client = Anthropic()
# Claude Code asks to load the file before touching it
tool_call = {
"name": "Read",
"input": {"file_path": "/app/services/billing.py"},
}
# The file's current text is returned and appended to history,
# so the next Edit can match an EXACT, real string.Edit — precyzyjny chirurg
Edit jest preferowanym narzędziem do zmieniania istniejących plików. Otrzymuje old_string i new_string, a następnie zastępuje jeden ciąg drugim.
Najważniejsza zasada: old_string musi pasować dokładnie raz. Unikalne dopasowanie gwarantuje, że edycja zostanie wykonana we właściwym miejscu i nigdzie indziej. Jeśli dopasowanie jest niejednoznaczne lub występuje wiele razy, edycja zostaje odrzucona, aby nie narazić się na zmianę niewłaściwego wiersza.
Edit działa chirurgicznie: pozostawia resztę pliku nietkniętą.
tool_call = {
"name": "Edit",
"input": {
"file_path": "/app/services/billing.py",
"old_string": "def refund(amount):\n return charge(-amount)",
"new_string": "def refund(amount):\n verify_identity()\n return charge(-amount)",
},
}
# Matches exactly once -> safe, targeted change.Co zrobić, gdy dopasowanie nie jest unikalne
Co zrobić, jeśli old_string występuje kilka razy lub nie można wyodrębnić unikalnego fragmentu? Edit celowo zakończy się niepowodzeniem, ponieważ nieunikalnego dopasowania nie można bezpiecznie zastosować.
Udokumentowane rozwiązanie zastępcze to: odczytać plik, a następnie zapisać go ponownie w całości. Przepisanie całego pliku na podstawie wersji, którą Claude właśnie odczytał, nadal zapewnia oparcie zmiany na rzeczywistej treści i usuwa niejednoznaczność.
To rozwiązanie Read + Write jest dokładnie tego rodzaju praktycznym szczegółem, który trzeba znać na egzaminie certyfikacyjnym.
# Edit failed: 'return result' appears 6 times.
# Fallback pattern:
# 1. Read the whole file (ground the content)
# 2. Write it back with the full, corrected text
tool_call = {
"name": "Write",
"input": {
"file_path": "/app/utils/parse.py",
"content": full_corrected_file_text,
},
}Write — utwórz lub zastąp
Write tworzy zupełnie nowy plik lub całkowicie nadpisuje istniejący nową treścią.
Po Write należy sięgnąć, gdy:
- Plik jeszcze nie istnieje (nowy moduł, konfiguracja lub test).
- Zmiana jest tak obszerna, że pełne przepisanie jest bardziej przejrzyste niż wykonanie wielu operacji Edit.
- Edit nie znalazł unikalnego dopasowania (jest to rozwiązanie zastępcze opisane w poprzedniej scenie).
W przypadku niewielkich, ukierunkowanych zmian w istniejących plikach należy preferować Edit — jest mniej ryzykowny, ponieważ pozostawia całą resztę bez zmian.
tool_call = {
"name": "Write",
"input": {
"file_path": "/app/services/__tests__/billing.test.py",
"content": "def test_refund_verifies_identity():\n ...",
},
}
# New file -> Write is the right choice (no existing text to Edit).Pętla wewnątrz agentic loop
Read / Edit / Write to wywołania narzędzi, więc działają w ramach standardowej agentic loop: wysyła się żądanie, sprawdza stop_reason, a jeśli ma ono wartość tool_use, uruchamia się narzędzie, dołącza wynik do historii i wysyła żądanie ponownie.
Model nie zachowuje stanu między turami — przy każdym żądaniu należy ponownie wysłać pełną historię wiadomości, w tym każdy wynik narzędzia. Dzięki temu treść pliku właśnie odczytanego przez Read pozostaje dostępna dla kolejnego Edit.
Działanie kończy się, gdy stop_reason przyjmie wartość end_turn, nigdy zaś przez wyszukiwanie w tekście słów takich jak „done”.
resp = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=2048,
messages=history, # FULL history every turn
tools=tools,
)
if resp.stop_reason == "tool_use":
# run Read/Edit/Write, append the tool_result, loop again
history.append(run_tool(resp))
elif resp.stop_reason == "end_turn":
done = True # terminate on the stop reason, not on parsed textNajpierw zbadaj, potem edytuj
Dobre edycje zaczynają się od dobrego rozpoznania. Zalecany schemat stopniowego działania wygląda następująco:
Grep — punkty wejścia → Read — pliki → Grep — użycia → Read — miejsca użycia.
Przed wczytaniem dużych plików należy zawęzić obszar, w którym powinna zostać wprowadzona zmiana. Dzięki temu kontekst pozostaje niewielki, a edycja precyzyjna. Glob służy do lokalizowania plików według wzorca nazwy, a Grep do znajdowania symbolu w ich treści.
Dopiero po zrozumieniu otaczającego kodu należy użyć Read dla dokładnego celu i zastosować Edit.
# 1) Find where the function lives
# Grep: "def process_refund"
# 2) Read that file
# 3) Find every caller
# Grep: "process_refund("
# 4) Read the consumers, then Edit with full context
glob = {"name": "Glob", "input": {"pattern": "**/billing*.py"}}Plan Mode dla dużych zmian
Nie każda zmiana powinna od razu przechodzić do trybu Edit/Write. Tryb planowania pozwala Claude bezpiecznie zbadać problem i zaproponować plan do zatwierdzenia przed zmodyfikowaniem jakiegokolwiek pliku.
Trybu planowania należy używać, gdy zadanie jest duże, obejmuje wiele plików, wymaga decyzji architektonicznej lub dopuszcza kilka możliwych podejść.
Bezpośrednie wykonywanie należy stosować przy poprawkach w jednym pliku lub w przypadku jednoznacznego stack trace — planowanie byłoby wtedy tylko dodatkowym obciążeniem. Subagent Explore może odizolować obszerny wynik rozpoznania, aby nie przepełniał głównego kontekstu.
Edycje wielu plików: przegląd w dwóch etapach
Gdy zmiana dotyczy wielu plików, należy oprzeć się pokusie przejrzenia wszystkiego za jednym razem. Jednoetapowy przegląd wielu plików rozprasza uwagę i prowadzi do przeoczenia błędów między plikami.
Wzorzec zalecany na egzaminie obejmuje dwa etapy:
- Lokalny przegląd każdego pliku — sprawdzenie poprawności każdego pliku z osobna.
- Osobny przegląd integracji między plikami — sprawdzenie, jak zmodyfikowane pliki współdziałają (wspólne sygnatury, importy, kontrakty).
Ta sama dyscyplina, która zapewnia precyzję pojedynczych operacji Edit, sprawia, że zestaw operacji Edit jest godny zaufania.
Zabezpieczenia, których pętla nie zapewnia
Pętla Read / Edit / Write sprawia, że zmiany są oparte na rzeczywistym kodzie i precyzyjne — nadal jednak jest sterowana przez model i probabilistyczna (około 90% niezawodności), a nie gwarantowana.
Gdy zmiana w pliku musi przestrzegać twardej reguły (polityki bezpieczeństwa, nagłówka licencyjnego, zakazanego API), nie należy polegać wyłącznie na promptcie. Należy użyć deterministycznego egzekwowania reguł:
- Pliki
.claude/rules/z sekcją frontmatterpathssą wczytywane tylko wtedy, gdy edytowane są pasujące pliki. - Hooks (np. PostToolUse) egzekwują zasady w 100% deterministycznie.
Prompty ukierunkowują, a hooki gwarantują. Po hooki należy sięgać, gdy błąd może mieć konsekwencje finansowe, prawne lub związane z bezpieczeństwem.
---
paths:
- "src/payments/**"
---
# Loaded ONLY when editing payment files.
# Every refund path must call verify_identity() before charge().
# Critical money rules: enforce with a PostToolUse hook too —
# prompts are ~90%, hooks are 100%.Szybkie sprawdzenie: wybór właściwego narzędzia
Zlecasz Claude Code zmianę nazwy helpera, który jest wywoływany w 9 miejscach w jednym pliku. Claude odczytuje plik i próbuje wykonać operację Edit, w której old_string to tylko result — ten token występuje wiele razy, więc operacja Edit zostaje odrzucona z powodu nieunikatowego dopasowania. Jaki powinien być prawidłowy następny krok?
Podsumowanie: bezpieczna pętla zapisu
Najważniejsze wnioski:
- Odczytaj przed zmianą — edycje muszą opierać się na rzeczywistym pliku, a nie na pamięci modelu.
- Edit to precyzyjna opcja domyślna: wymaga unikatowego dopasowania i pozostawia resztę pliku bez zmian.
- Gdy dopasowanie nie jest unikatowe lub plik jest nowy, należy użyć Read + Write (albo samego Write w przypadku nowych plików).
- Narzędzia te działają w ramach pętli agentowej: pełna historia w każdej turze, zakończenie na podstawie
stop_reason, nigdy na podstawie sparsowanego tekstu. - Najpierw zbadaj problem (Grep → Read → Grep → Read); używaj trybu planowania przy dużych zmianach oraz przeglądu dwuetapowego w przypadku wielu plików.
- W przypadku twardych reguł uzupełnij pętlę o pliki reguł i hooki — prompty ukierunkowują (około 90%), a hooki gwarantują (100%).
Ucz się Python dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 26
- Lekcje
- 104
Często zadawane pytania
Czy lekcja „Pętla Read / Edit / Write” jest bezpłatna?
Tak — pełny tekst „Pętla Read / Edit / Write” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Claude Architect, przejdź na CoddyKit PRO. Kurs Claude Architect zawiera 4 lekcji w sumie.
Co nauczysz się w „Pętla Read / Edit / Write”?
Jak Claude Code bezpiecznie zmienia pliki Ćwiczysz Claude Architect z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Claude Architect?
Nie wymagamy żadnego doświadczenia. Claude Architect w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Pętla Read / Edit / Write”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Claude Architect?
Tak. Każda lekcja Claude Architect zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Czym jest Claude Code
- Tryb interaktywny a bezgłowy
- Pętla Read / Edit / Write
- Pamięć i polecenia Compact