Sa loob ng 40 oras upang bumuo ng isang MCP server na nag-aalok ng code review prompts, ang isang kolega ay bumalik ng isang markdown file sa Ikaw ay nag-aalok ng 10 minuto at 40 minuto, at ang mga ito ay magkakaiba. .claude/skills/ Ang karanasan na ito ay nag-aalok sa akin ng isang bagay na walang dokumento ay nagpapahiwatig na mas malinaw na. Claude Code ay may tatlong distinct extensibility mechanisms, at ang mga ito ay may zero overlap kapag makikita mo kung ano ang nagtatrabaho ng bawat isa sa katunayan. Sa ilalim ng tatlong mekanismo na ito ay nagpapakita ng isang deliberate architectural philosophy na kailangan mong malaman bago mo ibinigay ang isang single line ng configuration. ang design decision Ang Arkitektura Sa Bagong Three Mechanisms Ang lahat ng mga extension sa Claude Code ay dumadaan sa isa sa tatlong kategorya. Ang mga ito ay magagamit bilang mga partikular na mekanismo dahil ito ay gumagana sa fundamentally iba't ibang mga layer ng sistema. Ito ay hindi aksidental. Ang bawat isa ay tumugon sa isang iba't ibang arkitektural na tanong. Answer: "Ano ang Claude access systems sa labas ng kanyang limitasyon ng proseso?" Ang mga ito ay separate na mga programa na komunikate sa Claude sa pamamagitan ng JSON-RPC. Ang Model Context Protocol defines ang format ng wire (tool calls, resource reads, prompt templates), ngunit ang server mismo ay lamang isang programa na nagsasalita JSON sa pamamagitan ng stdio o HTTP. Ito ay nagtataguyod ng kanyang sarili na koneksyon, ang kanyang sarili na estado, ang kanyang sarili na lifecycle. Claude ay nagpadala ng isang pangangailangan, ang server ay nagtatag ng trabaho, at nagpadala ng isang reaksyon. Real inter-process communication na may lahat ng mga implikasyon na itinatag. MCP servers Ang isang subagent ay isang isolated Claude session na may kanyang sarili na system prompt, ang kanyang sarili na model selection, ang kanyang sarili na tool access, at kritically ang kanyang sarili kontekstong window. Kapag i-invocate ang isang subagent, ito ay nagsisimula fresh. Walang kumulat na kontekstong mula sa iyong nakaraang konversasyon. Walang access sa tool higit sa kung ano ang iyong eksplicit na ibinigay. Ang isolation ay ang feature. Subagents Answer: "Bakit mo injection reusable knowledge sa isang konversasyon?" A skill ay isang markdown file na naging isang slash command. Kapag invokado, ang kanyang mga nilalaman ay injection directly sa kasalukuyang konversasyon bilang mga instruksyon. Walang bagong proseso. Walang isolation. Walang separate context. Just text that shapes Claude's behavior within the existing session. Skills Paano ang mga server ng MCP ay tunay na gumagana sa ilalim ng kape Ang Model Context Protocol ay isang JSON-RPC 2.0 protocol. Kapag inilunsad ang Claude Code, inilunsad ito ang bawat configured MCP server bilang isang anak na proseso at itinatag ng isang bidirectional communication channel sa pamamagitan ng stdio. Ang server advertises ang kanyang mga kakayahan (ang mga tool na ito ay nagbibigay, kung ano ang mga resource na ito ay nag-expose) at Claude inkorporates ang mga ito sa kanyang available toolkit. Kapag ang Claude ay nagpasya upang gamitin ang isang tool ng MCP, ang sequence ay: Claude generates isang tool call na may isang pangalan at JSON arguments Ang Claude Code ay nagpadala ito bilang isang JSON-RPC request sa pangunahing proseso ng server Ang server ay nag-execute ang request (sugulat ng isang database, i-call ng isang API, i-read ng isang file system) Ang server returns ang resulta bilang isang JSON-RPC response Si Claude Code ay nagbibigay ng reaksyon sa konteksto ng Claude Ito ay authentic inter-process communication. Ang server ay maaaring isulat sa anumang wika. Ito ay maaaring matatagpuan persistent na koneksyon sa databases, mga resulta ng cache, i-implementate rate limiting, ipatupad ang access controls. Ito ay isang tunay na programa na may real state. { "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}" } } } } ang at ang Ang mga variable ng environment sa itaas ay hindi mga tampok ng MCP protocol. Ito ay ang mga limitasyon ng seguridad sa level ng application na ginamit ng analytics server internally. Ito ay isang mahalagang arkitektural na punto: ang MCP protocol ay nagtatrabaho sa komunikasyon, ngunit ang iyong server ay nagtatrabaho sa mga patakaran. Kung ang Claude ay nag-iisip para sa bawat linya sa isang tatlong milyong tablo, ang protocol ay may kasiyahan na mag-relay na request. Ang iyong server ay kailangan upang sabihin hindi. MAX_ROWS QUERY_TIMEOUT_MS Para sa performance-critical integrations kung saan ang server nagtatrabaho ng mga libu-libong mga request o nagtatrabaho ng mga pool ng koneksyon, ang Rust ay mahahalaga ang investment. naglalaman ang buong proseso mula sa protocol handling hanggang sa produksyon deployment, kabilang ang connection pooling at graceful shutdown. Mga pahinang tumuturo sa MCP servers Ang mga remote MCP servers sa pamamagitan ng HTTP na may SSE ay sumusunod sa parehong protocol ngunit bumubuo ang stdio sa pamamagitan ng HTTP transport. Ito ay karaniwang para sa shared team infrastructure kung saan ang isang single MCP server instance ay nagtatrabaho sa maraming mga developer, ngunit ito ay nagtatag ng network latency at nangangailangan ng authentication. Para sa karamihan ng mga team, ang mga local stdio servers ay mas simpleng at mas mabilis. Kung paano ang mga subagents ay gumagana sa ilalim ng kape Ang subagents ay hindi isang patuloy na teknolohiya. Ito ay Claude Code sessions na may limitasyon na mga parameter. Kapag inilagay mo ang isang subagent, nagsimula ang Claude Code ng isang bagong konversasyon sa modelo na itinatag sa configuration ng agent. Ang system prompt ay dumating mula sa markdown na katawan ng file ng agent. Ang listahan ng mga tool ay napilyar lamang sa kung ano ang configuration ng agent ay nagbibigay. At kritikal, ang window ng kontekstong ito ay malapit sa system prompt at ang trabaho na ibinigay mo sa subagent. Ang pag-isolat na ito ay may mataas na implikasyon para sa parehong gastos at kalidad. Pumunta sa isang pag-debug session kung saan ikaw ay nag-explore ng isang codebase para sa tatlong minuto. Ang iyong pangunahing kontekstong window ay naglalaman ng karamihan ng mga pag-read ng file, mga resulta ng pag-grep, stack traces, at pag-conversation turn. Kung ngayon ay nag-iisip mo para sa isang review ng code sa parehong session, ang pag-review ay dumating sa konteksto ng lahat ng ang pag-debug ng bull. Ang modelo ay dapat magtrabaho sa pamamagitan ng kumulat na kontekstong upang mag-focus sa pag-review task. Ang isang subagent ay nagsisimula clean. Ang konteksto nito ay naglalaman lamang ang system prompt (ang iyong review criteria) at ang mga file na ibig sabihin sa kanya upang i-review. Walang bull. Walang kumulat na estado. Ito ang dahilan kung bakit ang mga review ng subagent ay karaniwang sa main-session reviews, dahil ang modelo ay fokusado na ganap na sa task. Magandang --- 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. ang Para sa pattern-matching trabaho tulad ng style checking at convention enforcement, Haiku performs comparably sa Opus. model: haiku ang Ang direktibo ay lumikha ng isang hard boundary. kahit na ang system prompt ay nagsabi "fix any problems you find," ang subagent ay hindi maaaring i-modify ang mga file. Ito ay pinapanatili sa tool-access layer, hindi ang prompt layer. Ito ay isang tunay na security boundary. disallowedTools: Write, Edit ang Hindi ito, ang isang subagent na pag-analysado ng isang malaking code base ay maaaring iterate para sa limang turn, pag-akumulate ang gastos. maxTurns: 15 Ang Real Cost Matematics ng Model Routing Ito ay kung saan ang mga subagents ay magbayad para sa kanila at pagkatapos ay ang ilang. Ang mga numero ay dapat na magtrabaho sa pamamagitan. Tingnan ang isang team ng limang developer, ang bawat isa ay gumagana ng halos tatlong review ng code bawat araw sa pamamagitan ng Claude Code. Walang sub-agents, ang bawat review ay gumagana sa pangunahing Opus session. Sa pamamagitan ng kontekstong akumulasyon mula sa iba pang mga trabaho, ang isang tipikal review ay maaaring gumagamit ng 15,000-25,000 input tokens at lumikha ng 2,000-4,000 output tokens. Sa Opus pricing, ito ay hindi trivial sa pagitan ng limang review bawat araw. Sa isang subagent ng Haiku, ang parehong review ay gumagana sa isang clean context window. Ang input tokens ay bumaba sa 3,000-8,000 (sistem prompt plus ang code na reviewed, walang kumulat na konteksto). At ang gastos per-token ng Haiku ay mas mababa kaysa sa Opus. Ang kombinasyon ng mas maliit na konteksto at mas madali na modelo ay karaniwang humihinto ang gastos ng review ng code sa 85-95%. But there is a subtler cost benefit. Dahil subagent context windows are isolated and clean, ang mga review ay mas mabilis. Less input context means less processing time. A Haiku subagent review typically returns in 2-5 seconds. The same review in a bloated Opus session might take 10-20 seconds. Sa higit sa fifty daily reviews, na kung saan ay mahahalaga na mga savings ng oras. Ang patakaran sa model routing ay hindi kailanman maunawaan, ngunit ang ilang mga gawain ay kinakailangan ng tunay na pag-argumentasyon sa level ng Opus. Deep debugging sessions kung saan ang modelo ay kinakailangan upang magkaroon ng isang kompleksong estado sa lahat ng mga file. Arkitektural na pag-analysis kung saan ang modelo ay kinakailangan upang mag-argument tungkol sa mga implikasyon sa buong sistema. Refactoring mga gawain kung saan ang modelo ay kinakailangan upang malaman ang mga subtle semantic relationships. Ang mga ito ay dapat magkaroon ng Opus, ngunit sa mga isinal na subagents upang ang konteksto ay matatagpuan. Para sa karagdagang pakikipagtulungan ng gastos, ang aming naglalaman ng model routing kasama ang iba pang mga approaches tulad ng kontekstong pamamahala at token-aware prompting. Ang Claude Code Cost Optimization Paano Mga Skills Work sa Prompt Layer Mga Skills ay architecturally ang simplest mechanism, at ang simplicity ay isang tampok. Ang pangalan ng directory ay naging ang slash command. ang napili ng mga taga-hanga: Claude Code Raeds at i-injects ang kanyang mga koneksyon sa kasalukuyang konversasyon. .claude/skills/ /review .claude/skills/review/SKILL.md Walang proseso. Walang isolation. Walang separado na kontekstong window. Ang teksto ng skill ay sumali sa iyong kasalukuyang konversasyon tulad ng kung ikaw ay inilagay ito sa iyo. Ito ay nangangahulugan na skills ay gumagamit mula sa kasalukuyang kontexto ng konversasyon (Claude na alam kung ano ang mga file na ikaw ay nagtatrabaho sa) ngunit sila din inihahati ang kumulat na bulldoz ng konversasyon. # 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 ang Ang syntax ay nag-execute ng isang shell command sa oras ng invocation at injects ang output. Ito ay nagbibigay ng mga kaligtasan na limitadong dynamic kapangyarihan. Ang mga ito ay maaaring naglalaman ng file contents, environment variables, o command output, ngunit sila ay hindi maaaring magtataguyod ng mga koneksyon o i-execute multi-step external operations. Ang shell command ay nag-execute lamang, ang kanyang output ay na-captured, at ang static text ay naging bahagi ng prompt. $(cat db/schema.sql) ang Ang variable ay naglalaman ng lahat pagkatapos ng slash command. Gumawa ang sa file path, na nagbibigay-daan sa iyo upang i-direct ang skill sa anumang mga file. $ARGUMENTS /migration db/migrations/20260311_add_sessions.sql $ARGUMENTS Magbigay ng inspirasyon sa kontemporaryong designer ay maaaring gumawa ng kahit ano, kahit ano, at ang New Year - ay walang exception. Naglalaman ng kung paano ang QA engineers, product managers, at technical writers ay lumikha ng mahusay na kaligtasan nang walang pag-atake ng code. Mga Talent para sa Non-Technical Teams Kung hindi mo gamitin ang bawat mekanismo (anti-pattern) Pero kapag nalaman niyang nakilala mo siya dahil binasa mo ang diary... get ready for the consequences. MCP Server Anti-Pattern para sa Paggamit Kung ang impormasyon ay hindi mababago sa pagitan ng mga invocations at hindi dumating mula sa isang external system, ito ay isang kaligtasan. nakita ko na ang mga team ay bumuo ng mga server ng MCP na magbigay ng mga standard ng coding ng kumpanya, API dokumentasyon, kahit na mga guides ng style. Ang lahat ng ito ay static text. Ang isang markdown file ay gumagana ito mas mahusay, mas mabilis, at sa zero maintenance. Do not build an MCP server to serve static content. Kung ang iyong "integration" ay nagsisimula ng isang CLI command at pag-parsing ang output, hindi mo kailangan ng isang MCP server. Ang isang kaligtasan na inirerekomenda ni Claude upang gamitin ang Bash sa anumang mga komento ay mas simpleng. Hindi lahat ng mga external na kailangan ng isang MCP server. Kung Claude ay maaaring mag-execute ng isang CLI command sa pamamagitan ng Bash, ito ay mas simpleng kaysa sa pagbuo at pag-manage ng isang MCP server. CLIs (sa pamamagitan ng Bash tool) ay mahusay para sa local, single-agent workflows. Do not build an MCP server when a Bash tool call would suffice. Ang mga server ng MCP ay kinakailangan kapag kailangan mo ng remote execution, permission scaling, persistent connections, o stateful operations. At ang run Hindi kailangan ng isang server ng MCP para sa ito. Ito ay mga komento ng CLI na maaaring i-execute sa pamamagitan ng Claude. Ang mga server ng MCP ay makakuha ng ang kanilang kompleksidad kapag mayroong maraming mga agente o mga gumagamit na kailangan ng pag-share access, kapag kailangan mo ng mga fin-grained permission controls, o kapag ang integration ay nangangailangan ng pag-usapan ng estado sa pamamagitan ng maraming mga request. git log cargo test Ang isang server ng MCP na nag-execute ng arbitrary SQL laban sa produksyon ay isang loaded weapon. Ang bawat server ay dapat ipatupad ang mga timeouts ng query, limitasyon ng row, access-only access kung kailangan, at input validation. Ang protocol ay hindi mag-protektahan sa iyo. Ang iyong server code ay dapat. Do not build an MCP server without safety boundaries. Mga Subagent Anti-Patterns Ang mga subagents ay lumilitaw para sa repetitive, specialized na trabaho. Kung kailangan mo upang gawin ang isang bagay isang beses, lamang gawin ito sa pangunahing sesyon. Ang overhead ng paglikha at panatilihin ng isang file ng configuration ng agent ay hindi kailangang gawin para sa ad-hoc na trabaho. Do not create a subagent for a one-off task. Ang ilang mga gawain ay nangangailangan ng mas mataas na pag-argumentation. I tried running architectural analysis on Haiku once. It identified surface-level problems but missed a circular dependence that Opus caught immediately. Haiku ay brilliant para sa pattern matching at checklist enforcement. It's struggles with tasks requiring multi-step reasoning across many files. Do not route everything to Haiku to save money. Ang isang subagent na inilagay ng isang iba pang subagent na inilagay ng isang third ay isang anti-pattern. Ang bawat layer ay nagtatag ng latency at hinihintay ang tunay na trabaho na ginawa. Kung kailangan mo ng maraming orchestration, i-restructure ang iyong pamamaraan. Karaniwang ang solusyon ay isang subagent na may access sa maraming mga server at kaligtasan ng MCP, hindi isang serye ng subagents. Do not create deeply nested subagent chains. Mga Anti-Patterns "Kontrol ang rate ng error ng produksyon" bilang isang skill instruction ay nagpapahiwatig Claude sa halusinate metric. Kung ang trabaho ay nangangailangan ng data mula sa labas ng Claude's session, kailangan mo ng isang MCP server (o isang subagent na may MCP access). Do not write skills that require external data. Ang content ng isang skill ay injected sa kontekstong window. Ang isang skill ng 5,000 na mga salita ay gumagamit ng tokens sa bawat invocation. Mag-focus ang skills. Kung kailangan mo ng extensive reference material, gamitin ang I-inject ito ng conditional rather than incorporating it directly into the skill. Do not write skills that are too long. $(cat reference.md) Kung ang kasalukuyang kontekstong ito ay nakakaapekto sa isang relasyon na trabaho, ang kaligtasan ng kaligtasan ay humaba. Ang mga gawain na kailangan ng isang clean slate (reviews, analysis, documentation generation) ay mas mahusay na itinuturing sa pamamagitan ng mga subagents na nagsimula sa isang bagong window ng kontekstong ito. Do not use skills for tasks that need isolation. Ang komposisyon ng modelo sa produksyon Hindi lamang ang katotohanan, ngunit ito ay, bilang isang gulay, ay lamang ang pinaka-cool na bagay na manufactured sa pamamagitan ng Ina Earth. Ang isang subagent ay maaaring magkaroon ng mga server ng MCP na ibinigay sa kanya. Ito ay lumikha ng scope access. Ang isang subagent ng code-reviewer ay maaaring makakuha ng access sa GitHub's API sa pamamagitan ng GitHub MCP server ngunit hindi maaaring ma-touch ang iyong database o deployment pipeline. Ang subagent ng database-analyst ay nag-load ang sql-standards skill, kaya ang bawat pag-analysis ay sumusunod sa mga conventions ng iyong team at mga pattern ng query nang hindi ang subagent ng analyst ay kailangan ng mga conventions sa kanyang system prompt. At ang isang subagent ay may mga limitasyon ng mga tool na independiyenteng sa kanyang access sa MCP. Maaari mong magbibigay ng isang subagent ng access sa GitHub MCP server (at ito ay maaaring basahin ang mga PR at mga komento) habang i-disable ang Write at Edit (at ito ay hindi maaaring i-modify ang mga lokal na mga file). Ang mga tool ng MCP at ang mga built-in na mga tool ay kontrolado separately. Sa aming produksyon setting sa pagitan ng 8 marketplace plugins, ang layering ay tulad ng ito: 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) Lahat ng subagent ay sumusunod ng eksaktong mga server ng MCP at mga kaligtasan na ito ay kinakailangan, sa layer ng modelo na matatagpuan sa kanyang kompleksidad ng mga gawain. Ang deployment-checker ay gumagamit ng Sonnet dahil ito ay kinakailangan upang mapagkukunan tungkol sa paghahatid ng deployment sa iba't-ibang mga source ng data. Ang doc-writer ay gumagamit ng Haiku dahil ang teknikal na pagsasalin ay sa pangunahing pattern matching laban sa isang style guide. Ang debugger ay gumagamit ng Opus dahil ang debugging ay kinakailangan ng mas malakas na pag-argumentasyon na magagamit. Para sa buong detalye sa kung paano gumagana ang mga layer na ito, ang aming guide sa Pagkatapos ng pagbabago, mag-set up ang lahat ng mga bagay na kailangan mong gawin, at pagkatapos ay mag-set up ang mga bagay na kailangan mong gawin. I-cover ang lahat ng frontmatter field na may mga halimbawa. Plugins, MCP servers, at skills bilang isang layered architecture Mga pahinang tumuturo sa Claude Agent Building ang decision function Pagkatapos ng isang taon ng pagbuo ng produksyon plugins, ang decision ay isang purong function ng kung ano ang kailangan mo: 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 Kung ikaw ay tumingin sa iyo upang bumuo ng isang MCP server na magbigay ng static na teksto, i-stop. Ito ay isang kaligtasan. Kung ikaw ay nag-script ng isang kaligtasan na nag-scroll ang database, i-stop. Ito ay isang MCP server. Kung ikaw ay gumagana ng mahalagang Opus session para sa mga routine check, i-stop. Ito ay isang subagent sa Haiku. Ano ang nagbabago sa akin Sa oras na ito, ang halaga ng transpiration ay maliit, at ang mga dahon ng dahon ay unti-unting nabuksan. Pagkatapos ng restrukturisasyon: 34+ skills code ang aming team conventions sa pagitan ng code review, database work, deployment, documentation, at API design. Lima subagents handle specialized tasks sa right price point with the right access controls. Four MCP servers connect to exactly the external systems that need to connect, each with proper security boundaries. Ang mga gastos ng buwan ay umabot nang malaki. Ang kalidad ng pag-review ay mababago dahil ang mga subagents ay nagsisimula sa clean context. Team conventions ay naging konsistensiya dahil ang mga kaligtasan ay gumagawa sa mga ito sama-sama para sa bawat developer. At ang mga server ng MCP ay naging mas simpleng dahil sila ay nagsisimula upang maging lahat; sila lamang ang mga bridge sa mga eksternal na mga sistema at walang iba pa. Ang extensibility triangle ay hindi isang teorikal na framework. Ito ay isang praktikal na tool na hinihintay sa iyo mula sa pagbuo ng mabigyan na bagay. Na kung saan, dahil ako ay binuo ng mabigyan na bagay tatlong beses bago maunawaan ito, ito ay mahalaga na malaman tungkol sa.