Keturiasdešimt valandų statant MCP serverį, kuris aptarnavo kodo peržiūros užklausas, kolega nuleido žymėjimo failą Tai buvo dešimt minučių prieš keturiasdešimt valandų. .claude/skills/ Ši patirtis mane išmokė kažko, ko jokia dokumentacija nepakankamai aiškiai paaiškina. „Claude Code“ turi tris skirtingus išplėtimo mechanizmus, ir jie turi nulinį dubliavimą, kai suprantate, ką kiekvienas iš jų iš tikrųjų daro. Šie trys mechanizmai atskleidžia apgalvotą architektūrinę filosofiją, kurią verta suprasti prieš rašydami vieną konfigūracijos liniją. Dizaino sprendimai Architektūra už trijų mechanizmų Kiekvienas Claude Code pratęsimas patenka į vieną iš trijų kategorijų. Jie egzistuoja kaip atskiri mechanizmai, nes jie veikia iš esmės skirtinguose sistemos sluoksniuose. Atsakymas: "Kaip Claude pasiekia sistemas už savo proceso ribų?" Jie yra atskiros programos, kurios bendrauja su Claude per JSON-RPC. Modelio konteksto protokolas apibrėžia laidų formatą (įrankių skambučius, išteklių skaitymo, skambučių šablonus), bet pats serveris yra tik programa, kuri kalba JSON per stdio ar HTTP. Jis palaiko savo ryšius, savo būseną, savo gyvavimo ciklą. Claude siunčia užklausą, serveris atlieka darbą ir siunčia atsiliepimą. MCP servers atsakymas: „Kaip veikiate Claude su skirtingu elgesiu skirtingoms užduotims?“ Subagent yra izoliuota Claude sesija, turinti savo sistemos užklausą, savo modelio parinktį, savo įrankių prieigą ir kritiškai savo kontekstinį langą. Kai kreipiatės į subagentą, jis pradeda naują. Nėra sukaupto konteksto iš ankstesnio pokalbio. Nėra įrankių prieigos už tai, ką aiškiai suteikėte. Izoliacija yra funkcija. Subagents Atsakymas: „Kaip į pokalbį įšvirkšti pakartotinai naudojamas žinias?“ Įgūdis yra žymėjimo failas, kuris tampa slash komanda. Kai jis skambinamas, jo turinys tiesiogiai įšvirkščiamas į dabartinį pokalbį kaip instrukcijos. Nėra naujo proceso. Nėra izoliacijos. Nėra atskiro konteksto. Tiesiog tekstas, kuris formuoja Claude elgesį esamoje sesijoje. Skills Kaip MCP serveriai iš tikrųjų veikia pagal dangtelį Modelio konteksto protokolas yra JSON-RPC 2.0 protokolas. Kai Claude Code paleidžiamas, jis paleidžia kiekvieną konfigūruotą MCP serverį kaip vaiko procesą ir sukuria dvipusį komunikacijos kanalą per stdio. Kai Claude nusprendžia naudoti MCP įrankį, seka yra: Claude generuoja įrankių skambutį su pavadinimu ir JSON argumentais Claude Code tai siunčia kaip JSON-RPC užklausą atitinkamam serverio procesui Serveris atlieka užklausą (užklausa duomenų bazę, skambina API, skaito failų sistemą) Serveris grąžina rezultatą kaip JSON-RPC atsaką Claude Code grąžina atsakymą į Claude kontekstą Tai autentiškas tarpprocesinis bendravimas. serveris gali būti parašytas bet kuria kalba. Jis gali išlaikyti nuolatinius ryšius su duomenų bazėmis, talpyklos rezultatus, įgyvendinti greičio apribojimą, vykdyti prieigos kontrolę. Tai reali programa su realiąja būkle. { "mcpServers": { "analytics": { "command": "node", "args": ["./mcp-servers/analytics.js"], "env": { "DATABASE_URL": "postgresql://localhost/analytics", "MAX_ROWS": "1000", "QUERY_TIMEOUT_MS": "5000" } }, "deploy": { "command": "./mcp-servers/deploy-server", "args": ["--environment", "staging", "--read-only"], "env": { "API_TOKEN": "${DEPLOY_TOKEN}" } } } } Tų ir Pirmiau minėti aplinkos kintamieji nėra MCP protokolo funkcijos. Jie yra taikymo lygio saugumo ribos, kurias analizės serveris įgyvendina viduje. Tai yra svarbus architektūros taškas: MCP protokolas tvarko komunikaciją, bet jūsų serveris tvarko politiką. Jei Claude prašo kiekvienos eilutės dešimties milijonų eilučių lentelėje, protokolas laimingai perduos šį prašymą. MAX_ROWS QUERY_TIMEOUT_MS Dėl našumo kritinių integracijų, kuriose serveris tvarko tūkstančius užklausų arba palaiko ryšio baseinus, „Rust“ yra verta investicijos. apima visą procesą nuo protokolo tvarkymo iki gamybos diegimo, įskaitant ryšio sujungimą ir gražų išjungimą. MCP serverių kūrimas Rust Nuotoliniai MCP serveriai per HTTP su SSE seka tą patį protokolą, bet pakeičia stdio su HTTP transportu.Tai svarbu bendros komandos infrastruktūrai, kur viena MCP serverio instancija aptarnauja kelis kūrėjus, tačiau ji prideda tinklo vėlavimą ir reikalauja autentifikavimo.Daugumai komandų vietiniai stdio serveriai yra paprastesni ir greitesni. Kaip subagentai dirba po gaubtu Subagentai nėra atskira technologija. Jie yra Claude Code sesijos su ribotais parametrais. Kai kreipiatės į subagentą, Claude Code pradeda naują pokalbį su modeliu, nurodytu agento konfigūracijoje. Sistemos perspėjimas ateina iš agento failo žymėjimo kūno. Įrankių sąrašas filtruojamas tik į tai, ką leidžia agento konfigūracija. Ir kritiškai, konteksto langas yra tuščias, išskyrus sistemos perspėjimą ir užduotį, kurią davėte subagentui. Ši izoliacija turi gilių pasekmių tiek kainai, tiek kokybei. Apsvarstykite perkrovimo sesiją, kurioje dvidešimt minučių tyrinėjote kodo bazę. Pagrindinis kontekstinis langas yra dešimtys failų skaitymo, užfiksuotų rezultatų, rinkinių pėdsakų ir pokalbių posūkių. Jei dabar paprašysite kodo peržiūros toje pačioje sesijoje, peržiūra vyksta atsižvelgiant į visą tą perkrovimo triukšmą. Subagent pradeda švariai. Jo kontekstas yra tik sistemos perspėjimas (jūsų peržiūros kriterijai) ir failai, kuriuos paprašėte peržiūrėti. Nėra triukšmo. Nėra sukauptos būsenos. nei pagrindinės sesijos apžvalgos, nes modelis yra visiškai sutelktas į užduotį. Geriau --- name: code-reviewer description: Reviews code for quality, security, and style model: haiku tools: Read, Grep, Glob, Bash disallowedTools: Write, Edit mcpServers: - github maxTurns: 15 --- You are a code review specialist. You have read-only access to the codebase and the GitHub API. Review criteria: - No unwrap() in production code paths (use proper error handling) - All public functions have doc comments - Error types implement std::fmt::Display - No println! in library code (use tracing macros) - Integration tests exist for new API endpoints - No TODO without a linked issue number For each file, provide a pass/fail checklist and specific line references for any failures. Do not provide general advice — only specific findings. Tų Direktyva nukreipia šį subagentą į pigiausią modelio lygį. Dėl modelio atitikties darbo, pvz., Stiliaus patikrinimo ir konvencijų vykdymo, Haiku atlieka panašiai kaip Opus. model: haiku Tų directive creates a hard boundary. Even if the system prompt said "fix any issues you find," the subagent cannot modify files. This is enforced at the tool-access layer, not the prompt layer. It's a genuine security boundary. disallowedTools: Write, Edit Tų Be to, subagent analizuojantis didelę kodo bazę gali pakartoti penkiasdešimt posūkių, kaupdamas sąnaudas. maxTurns: 15 Tikrosios modelio maršruto sąnaudų matematika Štai kur subagentai moka už save, o tada kai kurie. Apsvarstykite penkių kūrėjų komandą, kuri kiekvieną dieną atlieka maždaug dešimt kodų peržiūrų per Claude Code. Be subagentų, kiekviena peržiūra vyksta pagrindinėje Opus sesijoje. Atsižvelgiant į konteksto kaupimąsi iš kitų darbų, tipiškas peržiūra gali suvartoti 15 000–25 000 įvesties žetonų ir sukurti 2 000–4 000 išvesties žetonų. Su Haiku subagent, tas pats apžvalga veikia švario kontekste langą. Įvesties žetonai sumažėja iki 3000-8,000 (sistemos perspėjimas plius kodas yra peržiūrimas, nėra sukauptas kontekstas). Ir Haiku kaina už žetoną yra žymiai mažesnė nei Opus. Tačiau yra subtilesnė sąnaudų nauda. Kadangi subagentų konteksto langai yra izoliuoti ir švarūs, apžvalgos yra greitesnės. Mažesnis įvesties kontekstas reiškia mažiau apdorojimo laiko. Haiku subagentų apžvalga paprastai grįžta per 2-5 sekundes. Tas pats apžvalga išsiplėtusioje Opus sesijoje gali užtrukti 10-20 sekundžių. Daugiau nei penkiasdešimt dieninių apžvalgų, tai yra reikšminga laiko taupymas. Tačiau modelio maršruto sprendimas ne visada yra akivaizdus. Kai kurioms užduotims iš tikrųjų reikia Opus lygio motyvavimo. Gilios debugging sesijos, kuriose modelis turi išlaikyti sudėtingą būseną daugelyje failų. Architektūrinė analizė, kurioje modeliui reikia motyvuoti apie visos sistemos pasekmes. Refactoring užduotys, kuriose modeliui reikia suprasti subtilius semantinius santykius. Šie turėtų likti Opus, bet izoliuotuose subagentuose, kad kontekstas liktų švarus. Dėl platesnės sąnaudų strategijos, mūsų covers model routing alongside other approaches like context management and token-aware prompting. Claude Code sąnaudų optimizavimo vadovas Kaip įgūdžiai veikia Prompt Layer Įgūdžiai yra architektūriškai paprasčiausias mechanizmas, ir šis paprastumas yra funkcija. Adresų pavadinimas tampa slash komanda. Claude Code Raeds nuotr. ir įterpia jo turinį į dabartinį pokalbį. .claude/skills/ /review .claude/skills/review/SKILL.md Nėra proceso. Nėra izoliacijos. Nėra atskiro konteksto lango. Įgūdžių tekstas prisijungia prie esamo pokalbio, tarsi jį būtų įvedę patys. Tai reiškia, kad įgūdžiai gauna naudos iš esamo pokalbio konteksto (Claude jau žino, su kokiais failais dirbate), bet jie taip pat paveldi sukauptą pokalbio triukšmą. # SQL Migration Standards Review the migration files for compliance with team standards. ## Naming Conventions - Tables: plural snake_case (user_sessions, not UserSession or user_session) - Columns: singular snake_case (created_at, not CreatedAt) - Indexes: idx_{table}_{columns} (idx_user_sessions_user_id) - Foreign keys: fk_{table}_{referenced_table} (fk_orders_users) ## Safety Requirements - All CREATE INDEX must use CONCURRENTLY - ALTER TABLE ADD COLUMN must include a DEFAULT for non-nullable columns - No DROP COLUMN without a preceding release that stops reading the column - All migrations must be reversible (provide both up and down) ## Query Patterns - Use EXISTS instead of IN for subqueries - Use COALESCE instead of CASE WHEN ... IS NULL - Avoid SELECT * in application code - Always specify column lists in INSERT statements Current schema for reference: $(cat db/schema.sql) Migration to review: $ARGUMENTS Tų sintax vykdo skiltelės komandą skambučio metu ir įpurškia išvestį. Tai suteikia įgūdžių ribotą dinaminę galimybę. Jie gali apimti failų turinį, aplinkos kintamuosius arba komandos išvestį, tačiau jie negali palaikyti ryšių ar atlikti kelių žingsnių išorinių operacijų. Skiltelės komanda veikia vieną kartą, jos išvestis užfiksuojama, o tas statinis tekstas tampa skambučio dalimi. $(cat db/schema.sql) Tų kintamasis užfiksuoja viską po slash komandos. Nustatytų į failų kelią, leidžiantį nukreipti įgūdžius į konkrečius failus. $ARGUMENTS /migration db/migrations/20260311_add_sessions.sql $ARGUMENTS Įgūdžiai yra galingi būtent todėl, kad jie yra paprasti. Kiekvienas gali parašyti vieną. Komandoms, kuriose ne kūrėjams reikia koduoti savo patirtį, apima, kaip QA inžinieriai, produktų vadovai ir techniniai rašytojai kuria veiksmingus įgūdžius, neliesdami kodo. Ne techninės komandos įgūdžiai Kada nenaudoti kiekvieno mechanizmo (anti-patternų) Suprasti, ką kiekvienas mechanizmas daro gerai, yra tik pusė paveikslo.Žinant, kada išvengti kiekvieno iš jų, išvengiama klaidų, kurias padariau anksti. MCP serverių antipatternai Jei informacija nesikeičia tarp skambučių ir nepriklauso išorinei sistemai, tai yra įgūdis. Mačiau, kad komandos kuria MCP serverius, kurie grąžina įmonės kodavimo standartus, API dokumentaciją, netgi stiliaus vadovus. Do not build an MCP server to serve static content. Claude Code jau turi Bash įrankį. Jei jūsų "integracija" vykdo CLI komandą ir analizuoja išvestį, jums nereikia MCP serverio. Įgūdis, kuris nurodo Claude naudoti Bash su konkrečiomis komandomis, yra paprastesnis. Ne viskas išorės reikia MCP serverio. Jei Claude gali paleisti CLI komandą per Bash, tai paprasčiau nei kurti ir prižiūrėti MCP serverį. Do not build an MCP server when a Bash tool call would suffice. MCP serveriai yra būtini, kai reikia nuotolinio vykdymo, leidimų apimties, nuolatinių ryšių ar valstybinių operacijų. arba bėgimas MCP serveriai uždirba savo sudėtingumą, kai keli agentai ar vartotojai turi bendrą prieigą, kai jums reikia smulkiai išgrynintų leidimų kontrolės arba kai integracija reikalauja išlaikyti būseną per kelis prašymus. git log cargo test MCP serveris, kuris atlieka savavališką SQL prieš gamybą, yra įkeltas ginklas. Kiekvienas serveris turėtų vykdyti užklausos laiko tarpsnius, eilutės apribojimus, tik skaitymo prieigą, kai tinkama, ir įvesties patvirtinimą. Do not build an MCP server without safety boundaries. Subagent anti-patternų Subagentai šviečia pakartotiniam, specializuotam darbui. Jei jums reikia kažką padaryti vieną kartą, tiesiog tai atlikite pagrindinėje sesijoje. Agentų konfigūracijos failo kūrimo ir palaikymo užduotis nėra verta ad hoc darbo. Do not create a subagent for a one-off task. Kai kurios užduotys iš tikrųjų reikalauja stipresnio motyvacijos. Aš bandžiau atlikti architektūrinę analizę Haiku kartą. Jis nustatė paviršiaus lygio problemas, bet praleido apskritimo priklausomybę, kurią Opus sugavo iš karto. Haiku yra puikus modelių atitikimui ir kontrolinio sąrašo vykdymui. Jis kovoja su užduotimis, kurioms reikia daugelio žingsnių motyvacijos daugelyje failų. Do not route everything to Haiku to save money. Subagentas, kuris kreipiasi į kitą subagentą, kuris kreipiasi į trečiąjį, yra antipatternas. Kiekvienas sluoksnis prideda vėlavimą ir užmaskuoja faktinį atliktą darbą. Jei jums reikia tiek daug orchestravimo, pertvarkykite savo požiūrį. Paprastai atsakymas yra vienas subagentas, turintis prieigą prie kelių MCP serverių ir įgūdžių, o ne subagentų grandinė. Do not create deeply nested subagent chains. Anti-patternų įgūdžiai Jei užduotis reikalauja duomenų iš išorės Claude sesijos, jums reikia MCP serverio (arba subagent su MCP prieiga). Do not write skills that require external data. Įgūdžių turinys įšvirkščiamas į kontekstinį langą. 5000 žodžių įgūdis sunaudoja žetonus kiekviename raginime. Laikykite įgūdžius sutelktus. sąlyginai jį įšvirkšti, o ne tiesiogiai įterpti į įgūdžius. Do not write skills that are too long. $(cat reference.md) Įgūdžiai veikia dabartiniame kontekste. Jei dabartinis kontekstas yra užterštas nesusijusiu darbu, įgūdžių efektyvumas mažėja. Užduotis, kurioms reikia švarios lentelės (peržiūros, analizė, dokumentų kūrimas), geriau aptarnauja subagentai, kurie pradeda nuo naujo konteksto lango. Do not use skills for tasks that need isolation. Kompozicijos modelis gamyboje Trys mechanizmai nėra alternatyvūs. Jie yra sluoksniai, kurie sudaro. Suprasti kompozicijos modelius yra tai, kas atskiria darbo nustatymą nuo elegantiško. Subagentui gali būti priskirti MCP serveriai.Tai sukuria spektrinę prieigą.Code-reviewer subagent gali pasiekti GitHub API per GitHub MCP serverį, bet negali paliesti jūsų duomenų bazės ar diegimo vamzdžio.Mažiausia privilegija, vykdoma pagal konfigūraciją. Duomenų bazės-analitiko subagent įkelia SQL-standartų įgūdžius, todėl kiekviena analizė atitinka jūsų komandos pavadinimų konvencijas ir užklausų modelius, o analitiko subagentui nereikia tų konvencijų savo sistemos žinutėje. Galite suteikti subagentui prieigą prie GitHub MCP serverio (taigi jis gali skaityti PR ir komentarus), tuo pačiu neleidžiant rašyti ir redaguoti (taigi jis negali keisti vietinių failų). Mūsų gamybos nustatymas per 8 rinkos įskiepius, sluoksnis atrodo taip: Layer 3: Skills (Team Knowledge) /review — code review checklist /migration — database migration standards /deploy-check — pre-deployment verification steps /sql-standards — SQL naming and query conventions /api-design — REST endpoint design patterns Layer 2: Subagents (Specialised Behaviour) code-reviewer (Haiku, read-only, GitHub MCP, review skill) debugger (Opus, full access, all MCP servers) database-analyst (Sonnet, read-only, PostgreSQL MCP, sql-standards skill) deploy-checker (Sonnet, read-only, deploy + analytics MCP, deploy-check skill) doc-writer (Haiku, read-only, no MCP, style-guide skill) Layer 1: MCP Servers (External Connections) analytics-db — PostgreSQL metrics database deploy-pipeline — deployment API wrapper github — GitHub API for PRs and issues content-api — CMS for documentation publishing postgresql — application database (read-only) Kiekvienas subagentas sudaro tiksliai MCP serverius ir įgūdžius, kurių jam reikia, pagal modelio lygį, atitinkantį jo užduočių sudėtingumą. „Develop-checker“ naudoja „Sonnet“, nes jam reikia pagrįsti parengties diegimui keliuose duomenų šaltiniuose. „Doc-writer“ naudoja „Haiku“, nes techninis rašymas visų pirma yra modelio suderinimas su stiliaus vadovu. „Debugger“ naudoja „Opus“, nes iš tikrųjų reikia stipriausio prieinamo pagrindo. Dėl išsamios informacijos apie tai, kaip šie sluoksniai veikia kartu, mūsų vadovas per visą kompozicijos modelį. Ir konkrečiai subagentų konfigūracijai, mūsų Apima kiekvieną frontmatter lauką su pavyzdžiais. Plugins, MCP serveriai ir įgūdžiai kaip sluoksniuota architektūra Claude agentas statybos vadovas Sprendimo funkcija Po metų statant gamybos įskiepius, sprendimas yra gryna funkcija, ko jums reikia: def choose_mechanism(need): if need.requires_external_data or need.has_side_effects: return "MCP Server" if need.requires_different_model or need.requires_tool_restrictions or need.benefits_from_isolation: return "Subagent" if need.is_reusable_knowledge or need.is_workflow_template: return "Skill" if need.is_complex: return "Subagent + MCP Server + Skill" # compose all three Jei atsidursite statydami MCP serverį, kuris grąžina statinį tekstą, sustabdykite. Tai yra įgūdis. Jei rašote įgūdį, kuriame sakoma „užklausti duomenų bazę“, sustabdykite. Tai yra MCP serveris. Jei paleidžiate brangias Opus sesijas įprastiniams patikrinimams, sustabdykite. Kas pasikeitė mums Prieš suprasdami trikampį, mes turėjome MCP serverius, kurie atliko įgūdžių darbą, įgūdžius, kurie bando atlikti MCP serverių darbą, ir jokių subagentų. Po restruktūrizavimo: 34+ įgūdžiai koduoja mūsų komandos konvencijas per kodo peržiūrą, duomenų bazių darbą, diegimą, dokumentaciją ir API dizainą. Penki subagentai tvarko specializuotas užduotis tinkamu kainų tašku su tinkamomis prieigos kontrolėmis. Keturi MCP serveriai jungiasi tiksliai prie išorinių sistemų, kurioms reikia prijungti, kiekvienas su tinkamomis saugumo ribomis. Mėnesinės išlaidos gerokai sumažėjo. peržiūros kokybė pagerėjo, nes subagentai pradėjo nuo švarios aplinkos. Komandų konvencijos tapo nuoseklios, nes įgūdžiai juos vienodai įpareigoja kiekvienam kūrėjui. Ir MCP serveriai tapo paprastesni, nes jie nustojo bandyti būti viskas; jie tiesiog tiltas į išorines sistemas ir nieko daugiau. Išplėtimo trikampis nėra teorinė sistema. Tai praktinis įrankis, kuris neleidžia jums sukurti neteisingą dalyką. kuris, atsižvelgiant į tai, kad aš sukūriau neteisingą dalyką tris kartus prieš tai išsiaiškinant, verta žinoti apie tai.