Fəsil 02 · 7 dəq oxu

Claude Code-un mahiyyəti: agent loop, tool-lar və permission-lar

Claude Code-un mahiyyəti: agent loop, tool-lar və permission-lar

Claude Code terminalda işləyən coding . Onu layihənin qovluğunda claude yazaraq açırsınız, tapşırığı adi dillə yazırsınız və o, repository-ni oxuyur, faylları dəyişir, test-ləri işlədir, nəticəyə baxıb özünü düzəldir. Bu təsvir sadə görünür, amma içində üç ayrı ideya gizlənib: , tool-lar və permission sistemi. Bu fəsil həmin üç ideyanı açır, çünki kitabın qalan hissəsindəki hər , hook-dan qədər, bunların üzərində qurulub.

Autocomplete-dən chat-ə, chat-dən agent-ə

AI ilə kod yazmağın üç nəsli var. Birinci nəsil autocomplete-dir: editor-da növbəti sətri təklif edir, siz qəbul edirsiniz və ya etmirsiniz. İkinci nəsil chat assistant-dır: sual verirsiniz, kod alırsınız, onu özünüz kopyalayıb yapışdırır, işlədir və nəticəni geri yazırsınız. Hər iki halda feedback loop-u siz bağlayırsınız.

Üçüncü nəsil . Fərq model-in daha ağıllı olması deyil; fərq loop-un alətin içində bağlanmasıdır. faylı oxuyur, dəyişir, test-i işlədir, uğursuz nəticəni görür və yenidən cəhd edir. Siz nəticəni yox, prosesi idarə edirsiniz. Bunun gözlənilməz bir nəticəsi var: layihənizin mühiti, yəni test-lər, linter, type checker, build script-i, model-in özü qədər vacib olur. yalnız ölçə bildiyi şeyi düzəldə bilir. Test-i olmayan layihədə "işlədi" deyir və inanmaqdan başqa çarəniz qalmır; test-i olan layihədə isə iddiası yoxlanılır.

Agent loop

Claude Code-un nüvəsi sadə bir dövrdür:

istifadəçi prompt-u
   → model context-i oxuyur və düşünür
   → tool çağırır (fayl oxu, command işlət, ...)
   → tool-un nəticəsi context-ə əlavə olunur
   → model yenidən düşünür
   → ... tool çağırışları bitənə qədər
   → yekun cavab

Hər iterasiya context-ə nəsə əlavə edir: tool çağırışı və onun nəticəsi tarixçədə qalır. Birinci fəsildəki context büdcəsi məhz buna görə sürətlə xərclənir. Dövr model "iş bitdi" qərarı verəndə, siz Esc ilə dayandıranda və ya növbə limiti dolanda bitir.

Bu dövrün iki xüsusiyyəti vacibdir. Birincisi, o, şəffafdır: hər tool çağırışını, hər oxunan faylı, hər işlədilən command-ı terminalda görürsünüz. Chat-dən fərqli olaraq "düşündüm, belə olmalıdır" demir, "test-i işlətdim, 3 test uğursuz oldu, səbəbi budur" deyir. İkincisi, o, kəsilə biləndir: istənilən anda Esc basıb istiqaməti dəyişə bilərsiniz. Yaxşı agentic workflow model-i sərbəst buraxmaq deyil, dövrü doğru anlarda kəsib yönləndirməkdir.

Tool-lar: agent-in əlləri

Model özü heç nə edə bilmir; o, yalnız mətn yaradır. Dünyaya təsir tool-lar vasitəsilə olur. Claude Code bir dəst built-in tool ilə gəlir:

ToolNə edirNə üçün ayrıca tool kimi var
ReadFaylı oxuyur, sətir nömrələri iləModel dəqiq sətirə istinad edə bilsin
EditFaylda dəqiq mətn əvəzləməsi edirBütün faylı yenidən yazmaqdan təhlükəsiz və ucuzdur
WriteYeni fayl yaradır və ya tam əvəz edirYeni fayllar üçün
GlobAd şablonu ilə fayl tapır (src/**/*.ts)find-dan sürətli, nəticə strukturludur
GrepMəzmunda regex axtarışıBöyük repository-də kontekst xərcini azaldır
BashShell command işlədir: test, build, gitQalan hər şey üçün
WebFetch, WebSearchSənədləşmə və web sonrakı məlumat üçün
işə salırAyrı araşdırma (7-ci fəsil)

Niyə model hər şeyi Bash ilə etmir? Çünki ixtisaslaşmış tool-lar həm daha təhlükəsiz, həm də daha ucuzdur. Edit yalnız göstərilən parçanı dəyişir və parça tapılmasa xəta qaytarır; sed ilə eyni iş səhv regex ilə bütün faylı poza bilər. Read sətir nömrələri ilə strukturlu nəticə verir; cat sadəcə mətn tökür. Permission sistemi də tool səviyyəsində işləyir: Read təhlükəsiz sayılır, Bash yox.

Tool dəsti sabit deyil. MCP server-ləri yeni tool-lar əlavə edir (4-cü fəsil), siz isə hansı tool-ların mövcud olduğunu və hansının icazə tələb etdiyini konfiqurasiya edirsiniz. Model tool-u adına və təsvirinə görə seçir; buna görə də birinci fəsildəki "təsvir nə vaxt istifadə etməyi deməlidir" qaydası tool dizaynının əsasıdır.

Harness: model-dən çox şey

Claude Code iki hissədən ibarətdir: model və harness. Model Anthropic-in API-sindəki Claude-dur. Harness isə onun ətrafındakı hər şeydir: , tool-ların implementasiyası, permission yoxlamaları, context-in idarəsi və avtomatik compaction, memory fayllarının yüklənməsi, hook-lar, session-ların saxlanması, terminal interfeysi. Eyni model fərqli harness-də tamam fərqli nəticə verir, çünki harness model-in nə gördüyünü və nə edə bildiyini müəyyən edir.

Bu ayrım kitabın sonrakı fəsillərində vacibdir. Hook-lar harness-ə daxil olan nöqtələrdir. harness-in eyni model-i ayrı context ilə işə salmasıdır. Claude SDK isə eyni harness-in proqram kimi istifadəsidir: öz tətbiqinizdə Claude Code-un loop-unu, tool-larını və permission sistemini kitabxana kimi çağırırsınız. Harness-i başa düşmək model-dən nə gözləməyi və nə gözləməməyi öyrədir.

Permission sistemi: etibar dərəcələri

Faylları dəyişən və command işlədən təhlükəlidir. Claude Code bunu tool səviyyəsində icazə ilə həll edir. Default rejimdə oxuma tool-ları sərbəstdir; fayl dəyişikliyi və shell command-ı isə hər dəfə təsdiq tələb edir. Təsdiq verəndə seçim var: bu bir dəfəlik, yoxsa həmişəlik? "Həmişə icazə ver" seçimi settings faylına qayda kimi yazılır və növbəti dəfə soruşulmur.

Qaydalar tool və pattern səviyyəsində yazılır:

{
  "permissions": {
    "allow": ["Bash(npm test)", "Bash(npm run lint)", "Edit(src/**)"],
    "deny": ["Bash(rm -rf *)", "Read(.env)"]
  }
}

Hər layihədə eyni sualları təkrar təsdiqləmək yorucudur; icazə qaydaları həm vaxt qazandırır, həm də sərhədləri açıq yazır. deny qaydaları xüsusilə vacibdir: .env faylını oxumağa qadağa modeli görməkdən saxlayır, hətta tapşırıq onu tələb edəcək kimi görünsə belə.

Permission-ların bir neçə rejimi var və onlar arasında Shift+Tab ilə keçmək olur: hər dəyişikliyi soruşan default rejim, fayl dəyişikliklərini avtomatik qəbul edən rejim, heç nə dəyişməyib yalnız plan hazırlayan plan rejimi. 3-cü fəsil bunları ətraflı izah edir. Burada prinsip vacibdir: etibar binar deyil, dərəcəlidir, və dərəcəni tapşırığın riskinə görə seçirsiniz.

Probabilistik generasiya: eyni spec, fərqli nəticə

Model-in çıxışı ilə yaranır. Eyni iki dəfə işlədiləndə fərqli kod verir: fərqli adlandırma, fərqli struktur, bəzən fərqli architecture. Bunu problem kimi görmək olar; agentic coding isə onu resurs kimi görür.

Bir UI komponentinin spec-ini yazdığınızı düşünün: layout, rəng palitrası, animasiyalar, responsive davranış. Bir cəhd əvəzinə beş paralel eyni spec-i verib beş fərqli variant almaq olar. Sonra ən yaxşısını seçir və ya ikisini birləşdirirsiniz. Bu, "infinite agentic loop" adlanan pattern-dir: custom command spec faylını oxuyur, mövcud çıxışlara baxır ki, təkrar etməsin, hər fərqli istiqamət verir və onları dalğalarla işə salır.

/infinite specs/hero.spec.md out/hero 5

Dalğa ölçüsü təsadüfi deyil. Bir-beş variant üçün hamısı eyni anda işə düşür; altı-iyirmi üçün beş-beş; "sonsuz" rejimdə isə üç-beş agent-lik dalğalar orkestrator-un context-i dolana qədər davam edir. Hər nəticəsini orkestrator-a qaytarır və bu nəticə orkestrator-un context-ini xərcləyir; dalğa ölçüsünü məhz bu limit müəyyən edir. Birinci fəslin dərsi yenə qarşımızdadır: paralellik də context-lə məhdudlaşır.

Loop-u idarə etmək

şəffaf və kəsilə bilən olması sizə iki vərdiş qazandırmalıdır: izləmək və sübut tələb etmək.

İzləmək o deməkdir ki, işləyərkən terminala baxırsınız, xüsusilə tanımadığınız kod sahəsində. səhv fayla girəndə, mövcud helper-i görməyib yenisini yazmağa başlayanda və ya tapşırığı sizin nəzərdə tutduğunuzdan geniş anlayanda Esc ilə dayandırıb bir cümlə ilə yönləndirirsiniz: "o funksiya artıq utils/date.ts-də var, onu istifadə et". Bu bir cümlə on dəqiqəlik yanlış işi və onun context xərcini əvəz edir. tam sərbəst buraxmaq tanış, test-lə örtülmüş kodda münasibdir; qalan hallarda erkən kəsmək ucuzdur.

Sübut tələb etmək o deməkdir ki, "bitdi" cavabını yoxlama olmadan qəbul etmirsiniz. "test-lər keçir" deyirsə, test command-ının çıxışı terminalda görünməlidir; "bug düzəldi" deyirsə, bug-ı törədən ssenari təkrar işlədilməlidir. Loop-un dəyəri məhz burada, feedback-in alətin içində olmasındadır; feedback-i istəməyən istifadəçi bu dəyəri itirir. "dəyişiklikdən sonra test-ləri işlət və nəticəni göstər" yazmaq sadə, amma ən təsirli vərdişlərdən biridir.

Model seçimi də loop-un idarəsinə aiddir. Claude Code-da modeli session-ın ortasında dəyişmək olar: sürətli və ucuz model sadə, mexaniki işlər üçün, ən güclü model dizayn qərarları və çətin debugging üçün. Çətin problemdə model-in düşünmə dərinliyini artırmaq da mümkündür. Qayda sadədir: işin çətinliyi ilə model-in gücünü uyğunlaşdırın; hər tapşırığı ən güclü model ilə görmək həm bahadır, həm də çox vaxt lazımsızdır.

Kitabın nümunə layihəsi

Növbəti fəsillərdə nümunələr kiçik bir web app üzərində gedəcək: relnotes, komanda daxilində service-lərin note-larını JSON faylından oxuyub timeline kimi göstərən tətbiq. Onun strukturu məqsədli şəkildə sadədir: data modeli, siyahı və detal səhifələri, axtarış, bir neçə test. Sadəlik vacibdir, çünki fokus tətbiqin özü yox, onun üzərində Claude Code ilə işləmə üsullarıdır: command-lar, hook-lar, MCP, , skill-lər. Siz eyni üsulları öz layihənizə, hansı dildə və framework-də olmasından asılı olmayaraq, tətbiq edə bilərsiniz.

Tapşırıqlar

  1. Layihənizdə Claude Code-u açıb kiçik bir tapşırıq verin, məsələn "bu funksiyaya input validation əlavə et və test yaz". çağırdığı tool-ları ardıcıl yazın. Neçə iterasiya oldu, hansı tool ən çox çağırıldı və hansı nəticə ən çox context yer tutdu?
  2. Layihəniz üçün permissions.allow və permissions.deny siyahısı hazırlayın: ən azı üç təhlükəsiz command və ən azı iki qadağa. Qadağaların hər biri üçün hansı real riskdən qoruduğunu bir cümlə ilə yazın.
  3. Eyni kiçik spec-i, məsələn bir kart komponenti, üç ayrı session-da işlədin və nəticələri müqayisə edin. Hansı qərarlar hər dəfə eyni oldu, hansılar dəyişdi? Dəyişənləri spec-də sabitləmək lazımdırmı, yoxsa variasiya faydalıdır?