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 agent-dir. 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: agent loop, tool-lar və permission sistemi. Bu fəsil həmin üç ideyanı açır, çünki kitabın qalan hissəsindəki hər feature, hook-dan subagent-ə 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 agent-dir. Fərq model-in daha ağıllı olması deyil; fərq loop-un alətin içində bağlanmasıdır. Agent 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. Agent yalnız ölçə bildiyi şeyi düzəldə bilir. Test-i olmayan layihədə agent "işlədi" deyir və inanmaqdan başqa çarəniz qalmır; test-i olan layihədə isə agent-in 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 agent "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:
| Tool | Nə edir | Nə üçün ayrıca tool kimi var |
|---|---|---|
| Read | Faylı oxuyur, sətir nömrələri ilə | Model dəqiq sətirə istinad edə bilsin |
| Edit | Faylda dəqiq mətn əvəzləməsi edir | Bütün faylı yenidən yazmaqdan təhlükəsiz və ucuzdur |
| Write | Yeni fayl yaradır və ya tam əvəz edir | Yeni fayllar üçün |
| Glob | Ad şablonu ilə fayl tapır (src/**/*.ts) | find-dan sürətli, nəticə strukturludur |
| Grep | Məzmunda regex axtarışı | Böyük repository-də kontekst xərcini azaldır |
| Bash | Shell command işlədir: test, build, git | Qalan hər şey üçün |
| WebFetch, WebSearch | Sənədləşmə və web | Training data-dan sonrakı məlumat üçün |
| Agent | Subagent işə salır | Ayrı context window-da 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: system prompt, 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. Subagent-lər harness-in eyni model-i ayrı context ilə işə salmasıdır. Claude Agent 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 agent 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 secret-ləri 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ışı sampling ilə yaranır. Eyni prompt 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 subagent-ə 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 subagent-ə 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 subagent 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
Agent loop-unun şə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, agent işləyərkən terminala baxırsınız, xüsusilə tanımadığınız kod sahəsində. Agent 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. Agent-i 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. Agent "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. Prompt-a "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 release 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, subagent-lər, 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
- 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". Agent-in ç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?
- Layihəniz üçün
permissions.allowvəpermissions.denysiyahı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. - 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?