رفتن به محتوا

مرجع ابزارها

Claude Code به مجموعه‌ای از ابزارهای داخلی دسترسی دارد که به آن کمک می‌کنند کدبیست را بفهمد و تغییر دهد. نام‌های ابزار همان رشته‌های دقیقی‌اند که در قواعدِ دسترسی، فهرستِ ابزارهای ساب‌ایجنت و matcherهای hook استفاده می‌کنی. برای غیرفعال‌کردنِ کاملِ یک ابزار، نامش را به آرایه‌ی deny در تنظیماتِ دسترسی خود اضافه کن.

برای افزودنِ ابزارهای سفارشی، یک سرورِ MCP متصل کن. برای گسترشِ Claude با ورک‌فلوهای مبتنی‌بر پرامپتِ قابلِ‌استفاده‌ی مجدد، یک skill بنویس، که از طریقِ ابزارِ موجودِ Skill اجرا می‌شود به‌جای افزودنِ یک ورودیِ ابزارِ جدید.

ابزارتوضیحدسترسیِ لازم
Agentیک ساب‌ایجنت با پنجره‌ی کانتکستِ خودش برای انجامِ یک کار ایجاد می‌کند. رفتارِ ابزارِ Agent را ببینخیر
AskUserQuestionپرسش‌های چندگزینه‌ای می‌پرسد تا نیازمندی‌ها را جمع کند یا ابهام را روشن کندخیر
Bashدستورهای شل را در محیطت اجرا می‌کند. رفتارِ ابزارِ Bash را ببینبله
CronCreateیک پرامپتِ تکرارشونده یا تک‌باره را در نشستِ فعلی زمان‌بندی می‌کند. کارها محدود به نشست‌اند و در --resume یا --continue اگر منقضی نشده باشند بازیابی می‌شوند. کارهای زمان‌بندی‌شده را ببینخیر
CronDeleteیک کارِ زمان‌بندی‌شده را با ID لغو می‌کندخیر
CronListهمه‌ی کارهای زمان‌بندی‌شده‌ی نشست را فهرست می‌کندخیر
Editویرایش‌های هدفمند روی فایل‌های مشخص انجام می‌دهد. رفتارِ ابزارِ Edit را ببینبله
EnterPlanModeبه plan mode تعویض می‌کند تا پیش از کدنویسی یک رویکرد طراحی شودخیر
EnterWorktreeیک git worktree ایزوله می‌سازد و به آن تعویض می‌کند. یک path بده تا به‌جای ساختِ یکی جدید، به یک worktreeِ موجود از مخزن فعلی تعویض کنی. از داخلِ یک نشستِ worktree، یا از ساب‌ایجنتی با پوشه‌ی کاریِ پین‌شده مثلِ isolation: worktree، فقط شکلِ path در دسترس است و هدف باید زیرِ .claude/worktrees/ باشدخیر
ExitPlanModeیک plan را برای تأیید ارائه می‌دهد و از plan mode خارج می‌شودبله
ExitWorktreeاز یک نشستِ worktree خارج می‌شود و به پوشه‌ی اصلی برمی‌گردد. برای ساب‌ایجنت‌هایی که از قبل در پوشه‌ی کاریِ خودشان اجرا می‌شوند، مثلِ isolation: worktree، در دسترس نیستخیر
Globفایل‌ها را بر اساسِ تطبیقِ الگو پیدا می‌کند. رفتارِ ابزارِ Glob را ببینخیر
Grepدر محتوای فایل‌ها دنبالِ الگو می‌گردد. رفتارِ ابزارِ Grep را ببینخیر
ListMcpResourcesToolمنابعی را که سرورهای MCP متصل افشا می‌کنند فهرست می‌کندخیر
LSPهوشِ کد از طریقِ language serverها: پرش به تعاریف، یافتنِ ارجاع‌ها، گزارشِ خطاهای نوع و هشدارها. رفتارِ ابزارِ LSP را ببینخیر
Monitorدستوری را در پس‌زمینه اجرا می‌کند و هر خطِ خروجی را به Claude بازخورد می‌دهد، تا بتواند به ورودی‌های لاگ، تغییراتِ فایل یا وضعیتِ poll‌شده در میانه‌ی گفت‌وگو واکنش نشان دهد. ابزارِ Monitor را ببینبله
NotebookEditسلول‌های نوت‌بوکِ Jupyter را تغییر می‌دهد. رفتارِ ابزارِ NotebookEdit را ببینبله
PowerShellدستورهای PowerShell را به‌صورتِ بومی اجرا می‌کند. برای در دسترس‌بودن ابزارِ PowerShell را ببینبله
PushNotificationیک اعلانِ دسکتاپ می‌فرستد، و یک push به تلفن وقتی Remote Control متصل است، تا یک کارِ طولانی یا کارِ زمان‌بندی‌شده بتواند وقتی دور هستی به تو برسد. {/* plan-availability: feature=push-notifications providers=anthropic */}تحویلِ push از طریقِ زیرساختِ میزبانی‌شده‌ی Anthropic اجرا می‌شود، که از Amazon Bedrock، Google Vertex AI یا Microsoft Foundry قابل‌دسترس نیستخیر
Readمحتوای فایل‌ها را می‌خواند. رفتارِ ابزارِ Read را ببینخیر
ReadMcpResourceToolیک منبعِ MCP مشخص را با URI می‌خواندخیر
RemoteTriggerRoutineها را روی claude.ai می‌سازد، به‌روز می‌کند، اجرا می‌کند و فهرست می‌کند. پشتیبانِ دستورِ /schedule است. {/* plan-availability: feature=routines plans=pro,max,team,enterprise providers=anthropic */}Routineها روی claude.ai قرار دارند و به یک پلنِ Pro، Max، Team یا Enterprise نیاز دارند، پس این ابزار از Amazon Bedrock، Google Vertex AI یا Microsoft Foundry قابل‌دسترس نیستخیر
ScheduleWakeupتکرارِ بعدیِ یک /loop خودگام را دوباره زمان‌بندی می‌کند. Claude این را در پایانِ هر تکرار صدا می‌زند تا انتخاب کند بعدی کِی اجرا شود، بینِ یک دقیقه تا یک ساعتِ بعد؛ تو مستقیم صدایش نمی‌زنی. wakeupِ در انتظار در session_crons در ورودیِ Stop hook ظاهر می‌شود. {/* plan-availability: feature=loop-dynamic providers=anthropic */}روی Amazon Bedrock، Google Vertex AI یا Microsoft Foundry در دسترس نیست، که در آن‌ها یک پرامپتِ /loop بدونِ بازه به‌جایش روی زمان‌بندیِ ثابت اجرا می‌شودخیر
SendMessageپیامی به یک هم‌تیمیِ agent team می‌فرستد، یا یک ساب‌ایجنت را با شناسه‌ی ایجنتش ادامه می‌دهد. ساب‌ایجنت‌های متوقف‌شده به‌طور خودکار در پس‌زمینه ادامه می‌یابند. فقط وقتی در دسترس است که CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 تنظیم شده باشدخیر
ShareOnboardingGuide{/* plan-availability: feature=onboarding-guide-share plans=pro,max,team,enterprise providers=anthropic */}فایلِ ONBOARDING.md را آپلود می‌کند و یک لینکِ اشتراک برمی‌گرداند که هم‌تیمی‌ها می‌توانند در Claude Code باز کنند. پس از نوشته‌شدنِ راهنما از /team-onboarding فراخوانده می‌شود. برای مشترکانِ claude.ai روی پلن‌های Pro، Max، Team و Enterprise در دسترس استبله
Skillیک skill را در داخلِ گفت‌وگوی اصلی اجرا می‌کندبله
TaskCreateیک کارِ جدید در فهرستِ کارها می‌سازدخیر
TaskGetجزئیاتِ کاملِ یک کارِ مشخص را بازیابی می‌کندخیر
TaskListهمه‌ی کارها را با وضعیتِ فعلی‌شان فهرست می‌کندخیر
TaskOutput(منسوخ) خروجیِ یک کارِ پس‌زمینه را بازیابی می‌کند. به‌جایش Read روی مسیرِ فایلِ خروجیِ کار را ترجیح بدهخیر
TaskStopیک کارِ پس‌زمینه‌ی در حالِ اجرا را با ID می‌کُشدخیر
TaskUpdateوضعیت، وابستگی‌ها، جزئیاتِ کار را به‌روز می‌کند، یا کارها را حذف می‌کندخیر
TeamCreateیک agent team با چند هم‌تیمی می‌سازد. فقط وقتی در دسترس است که CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 تنظیم شده باشدخیر
TeamDeleteیک agent team را منحل می‌کند و فرایندهای هم‌تیمی‌ها را پاک‌سازی می‌کند. فقط وقتی در دسترس است که CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 تنظیم شده باشدخیر
TodoWrite{/* min-version: 2.1.142 */}چک‌لیستِ کارهای نشست را مدیریت می‌کند. از v2.1.142 به‌نفعِ TaskCreate، TaskGet، TaskList و TaskUpdate به‌طور پیش‌فرض غیرفعال است. CLAUDE_CODE_ENABLE_TASKS=0 را تنظیم کن تا دوباره فعال شودخیر
ToolSearchوقتی tool search فعال است، ابزارهای به‌تعویق‌افتاده را جست‌وجو و بارگذاری می‌کندخیر
WaitForMcpServers{/* min-version: 2.1.142 */}منتظرِ یک یا چند سرورِ MCP می‌ماند که هنوز در پس‌زمینه در حالِ اتصال‌اند، تا یک درخواست بتواند از ابزارهایشان استفاده کند بدونِ ری‌استارتِ نشست. Claude وقتی سرورِ موردِ نیاز هنوز متصل نیست آن را صدا می‌زند. فقط وقتی tool search غیرفعال است ظاهر می‌شود، چون وقتی فعال باشد ToolSearch انتظار را مدیریت می‌کندخیر
WebFetchمحتوا را از یک URLِ مشخص واکشی می‌کند. رفتارِ ابزارِ WebFetch را ببینبله
WebSearchجست‌وجوهای وب انجام می‌دهد. رفتارِ ابزارِ WebSearch را ببینبله
Workflowیک ورک‌فلوی پویا را اجرا می‌کند: اسکریپتی که چند ساب‌ایجنت را در پس‌زمینه هماهنگ می‌کند و یک نتیجه‌ی یکپارچه برمی‌گرداندبله
Writeفایل‌ها را می‌سازد یا بازنویسی می‌کند. رفتارِ ابزارِ Write را ببینبله

پیکربندیِ ابزارها با قواعدِ دسترسی و hookها

Section titled “پیکربندیِ ابزارها با قواعدِ دسترسی و hookها”

در بیشترِ موارد، Claude خودش تصمیم می‌گیرد کِی از این ابزارها استفاده کند و لازم نیست هنگامِ تعامل با Claude خودت نامشان را ببری. نام‌های ابزار را مستقیماً وقتی دسترسی‌ها و دیگر پیکربندی‌ها را تعریف می‌کنی ارجاع می‌دهی:

همه‌ی این‌ها همان قالبِ قاعده را می‌پذیرند، ToolName(specifier). specifier به ابزار بستگی دارد، و چند ابزار یک قالب را به‌اشتراک می‌گذارند:

قالبِ قاعدهاعمال برجزئیات
Bash(npm run *)Bash, Monitorتطبیقِ الگوی دستور
PowerShell(Get-ChildItem *)PowerShellتطبیقِ الگوی دستور
Read(~/secrets/**)Read, Grep, Glob, LSPتطبیقِ الگوی مسیر
Edit(/src/**)Edit, Write, NotebookEditتطبیقِ الگوی مسیر
Skill(deploy *)Skillتطبیقِ نامِ skill
Agent(Explore)Agentتطبیقِ نوعِ ساب‌ایجنت
WebFetch(domain:example.com)WebFetchتطبیقِ دامنه
WebSearchWebSearchبدونِ specifier؛ ابزار را به‌عنوانِ یک کل allow یا deny کن

ابزارهایی که اینجا فهرست نشده‌اند، مثلِ ExitPlanMode یا ShareOnboardingGuide، فقط نامِ خالیِ ابزار را بدونِ specifier می‌پذیرند.

یک قاعده‌ی allowِ Edit(...) دسترسیِ خواندن به همان مسیر را هم می‌دهد، پس به یک قاعده‌ی Read(...) متناظر نیازی نداری.

فیلدهای matcher در hook از نام‌های خالیِ ابزار استفاده می‌کنند، نه قالبِ قاعده‌ی پرانتزی. برای قواعدِ تطبیق الگوهای matcher را ببین. برای نام‌های فیلدی که هر ابزار به tool_input در hookها می‌دهد، مرجعِ ورودیِ PreToolUse را ببین.

ابزارِ Agent یک ساب‌ایجنت را در یک پنجره‌ی کانتکستِ جداگانه ایجاد می‌کند. ساب‌ایجنت کارش را به‌صورتِ خودمختار پیش می‌برد، بعد یک نتیجه‌ی متنیِ واحد به گفت‌وگوی والد برمی‌گرداند. والد فراخوانی‌ها یا خروجی‌های میانیِ ابزارِ ساب‌ایجنت را نمی‌بیند، فقط همان نتیجه‌ی نهایی را. برای محدودکردنِ تعدادِ نوبت‌هایی که یک ساب‌ایجنت اجرا می‌کند، maxTurns را در تعریفِ ساب‌ایجنت تنظیم کن.

همان ابزارِ Agent وقتی fork mode فعال باشد، ساب‌ایجنت‌های fork‌شده را هم راه‌اندازی می‌کند. یک fork به‌جای شروعِ تازه، کلِ گفت‌وگوی والد را به‌ارث می‌برد، همیشه در پس‌زمینه اجرا می‌شود، و همچنان پرامپت‌های دسترسی را در ترمینالت نمایان می‌کند. باقیِ این بخش ساب‌ایجنت‌های نام‌دار را توصیف می‌کند.

اینکه یک ساب‌ایجنتِ نام‌دار از کدام ابزارها می‌تواند استفاده کند به فیلدهای tools و disallowedTools در تعریفِ ساب‌ایجنت بستگی دارد:

  • هیچ‌کدام تنظیم نشده: ساب‌ایجنت هر ابزاری که در دسترسِ والد است را به‌ارث می‌برد.
  • فقط tools: ساب‌ایجنت فقط ابزارهای فهرست‌شده را می‌گیرد.
  • فقط disallowedTools: ساب‌ایجنت هر ابزارِ والد را به‌جز فهرست‌شده‌ها می‌گیرد.
  • هر دو تنظیم شده: disallowedTools اولویت دارد. ابزاری که در هر دو فهرست شده حذف می‌شود.

راه‌اندازیِ خودِ ساب‌ایجنت برای دسترسی پرامپت نمی‌دهد. فراخوانی‌های خودِ ابزارِ ساب‌ایجنت همان‌طور که اجرا می‌شود در برابرِ قواعدِ دسترسی‌ات بررسی می‌شوند:

  • ساب‌ایجنت‌های پیش‌زمینه همان پرامپت‌های دسترسی‌ای را نشان می‌دهند که در گفت‌وگوی اصلی می‌دیدی، در لحظه‌ای که هر فراخوانیِ ابزار رخ می‌دهد.
  • ساب‌ایجنت‌های پس‌زمینه پرامپت نشان نمی‌دهند. با دسترسی‌هایی که از قبل در نشست داده شده اجرا می‌شوند و هر فراخوانیِ ابزاری که در غیرِ این‌صورت پرامپت می‌داد را به‌طور خودکار رد می‌کنند. بعد از یک رد، ساب‌ایجنت بدونِ آن ابزار ادامه می‌دهد.

برای محدودکردنِ آنچه یک ساب‌ایجنت از همان ابتدا می‌تواند به آن برسد، فیلدِ toolsاش را تنگ کن، Bash را از فهرست بیرون بگذار، یا قواعدِ deny را در تنظیماتت بگذار، همان‌طور که در کنترلِ توانایی‌های ساب‌ایجنت توضیح داده شده. برای بیشتر درباره‌ی انتخاب بینِ پیش‌زمینه و پس‌زمینه، اجرای ساب‌ایجنت‌ها در پیش‌زمینه یا پس‌زمینه را ببین.

ابزارِ Bash هر دستور را در یک فرایندِ جداگانه با رفتارِ پایداریِ زیر اجرا می‌کند:

  • وقتی Claude در نشستِ اصلی cd را اجرا می‌کند، پوشه‌ی کاریِ جدید به دستورهای Bashِ بعدی منتقل می‌شود تا وقتی داخلِ پوشه‌ی پروژه یا یک پوشه‌ی کاریِ اضافی که با --add-dir، /add-dir یا additionalDirectories در تنظیمات اضافه کرده‌ای بماند. نشست‌های ساب‌ایجنت هرگز تغییراتِ پوشه‌ی کاری را منتقل نمی‌کنند.
    • اگر cd بیرون از آن پوشه‌ها فرود بیاید، Claude Code به پوشه‌ی پروژه ری‌ست می‌شود و Shell cwd was reset to <dir> را به نتیجه‌ی ابزار می‌افزاید.
    • برای غیرفعال‌کردنِ این انتقال تا هر دستورِ Bash در پوشه‌ی پروژه شروع شود، CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=1 را تنظیم کن.
  • متغیرهای محیطی پایدار نمی‌مانند. یک export در یک دستور در دستورِ بعدی در دسترس نخواهد بود.
  • aliasها و توابعِ شل که در فایلِ راه‌اندازیِ شلت تعریف شده‌اند در دسترس‌اند. در آغازِ نشست، Claude Code بسته به شلت ~/.zshrc، ~/.bashrc یا ~/.profile را source می‌کند، aliasها، توابع و گزینه‌های شلِ حاصل را می‌گیرد، و آن‌ها را به هر دستورِ Bash اعمال می‌کند.

virtualenv یا محیطِ conda خود را پیش از راه‌اندازیِ Claude Code فعال کن. برای اینکه متغیرهای محیطی در سراسرِ دستورهای Bash پایدار بمانند، CLAUDE_ENV_FILE را پیش از راه‌اندازیِ Claude Code روی یک اسکریپتِ شل تنظیم کن، یا از یک SessionStart hook برای پُرکردنِ پویایش استفاده کن.

دو محدودیت هر دستور را قید می‌زنند:

  • Timeout: به‌طور پیش‌فرض دو دقیقه. Claude می‌تواند با پارامترِ timeout تا ۱۰ دقیقه برای هر دستور درخواست کند. پیش‌فرض و سقف را با BASH_DEFAULT_TIMEOUT_MS و BASH_MAX_TIMEOUT_MS بازنویسی کن.
  • طولِ خروجی: به‌طور پیش‌فرض ۳۰٬۰۰۰ کاراکتر. وقتی دستوری بیش از آن تولید کند، Claude Code خروجیِ کامل را در فایلی در پوشه‌ی نشست ذخیره می‌کند و مسیرِ فایل به‌علاوه‌ی یک پیش‌نمایشِ کوتاه از ابتدا را به Claude می‌دهد. Claude وقتی به باقیش نیاز داشته باشد آن فایل را می‌خواند یا جست‌وجو می‌کند. محدودیت را با BASH_MAX_OUTPUT_LENGTH بالا ببر، تا سقفِ سختِ ۱۵۰٬۰۰۰ کاراکتر.

برای فرایندهای طولانی مثلِ سرورهای dev یا watch buildها، Claude می‌تواند run_in_background: true را تنظیم کند تا دستور را به‌عنوانِ یک کارِ پس‌زمینه شروع کند و حین اجرا به کار ادامه دهد. کارهای پس‌زمینه را با /tasks فهرست و متوقف کن.

ابزارِ Edit جایگزینیِ دقیقِ رشته انجام می‌دهد. یک old_string و یک new_string می‌گیرد و اولی را با دومی جایگزین می‌کند. از regex یا تطبیقِ فازی استفاده نمی‌کند.

برای اعمال‌شدنِ یک ویرایش باید سه بررسی موفق باشند:

  • خواندن-پیش‌از-ویرایش: Claude باید فایل را در گفت‌وگوی فعلی خوانده باشد، و فایل از زمانِ آن خواندن روی دیسک تغییر نکرده باشد. این بررسی اول اجرا می‌شود، پیش از هر تطبیقِ رشته.
  • تطابق: old_string باید دقیقاً همان‌طور که نوشته شده در فایل ظاهر شود. یک کاراکتر فضای خالی یا تفاوتِ تورفتگی کافی است که از دست برود.
  • یکتایی: old_string باید دقیقاً یک‌بار ظاهر شود. وقتی بیش از یک‌بار ظاهر شود، Claude یا رشته‌ی بلندتری با کانتکستِ اطرافِ کافی می‌دهد تا یک رخداد را قطعی کند، یا replace_all: true را تنظیم می‌کند تا همه را جایگزین کند.

دیدنِ یک فایل با Bash هم نیازمندیِ خواندن-پیش‌از-ویرایش را برآورده می‌کند، وقتی دستور یکی از cat، head، tail، sed -n 'X,Yp'، grep، egrep یا fgrep روی یک فایلِ واحد بدونِ pipe یا redirect باشد. خروجیِ pipe‌شده و دیگر دستورهای Bash به‌حساب نمی‌آیند، و Claude باید در آن موارد پیش از ویرایش از Read استفاده کند.

این فقط بر واجدِ شرایط‌بودنِ ویرایش اثر می‌گذارد، نه دسترسی‌ها. قواعدِ denyِ Read و Edit به دستورهای فایلی هم که Claude Code در Bash تشخیص می‌دهد، مثلِ cat، head، tail، sed و grep، اعمال می‌شوند، اما نه به زیرفرایندهای دلخواهی که به‌طور غیرمستقیم فایل می‌خوانند یا می‌نویسند، مثلِ یک اسکریپتِ Python یا Node که خودش فایل‌ها را باز می‌کند. مجموعه‌ی دستورهای شناخته‌شده برای قواعدِ deny با فهرستِ خواندن-پیش‌از-ویرایشِ بالا یکسان نیست: مثلاً egrep و fgrep برای خواندن-پیش‌از-ویرایش به‌حساب می‌آیند ولی در برابرِ قواعدِ denyِ Read بررسی نمی‌شوند. برای اعمالِ سطحِ سیستم‌عامل که هر فرایند را پوشش می‌دهد، sandbox را فعال کن.

ابزارِ Glob فایل‌ها را با الگوی نام پیدا می‌کند. از نحوِ استانداردِ glob از جمله ** برای تطبیقِ بازگشتیِ پوشه پشتیبانی می‌کند:

  • **/*.js همه‌ی فایل‌های .js را در هر عمقی تطبیق می‌دهد
  • src/**/*.ts همه‌ی فایل‌های .ts را زیرِ src/ تطبیق می‌دهد
  • *.{json,yaml} فایل‌های .json و .yaml را در پوشه‌ی فعلی تطبیق می‌دهد

نتایج بر اساسِ زمانِ تغییر مرتب و در ۱۰۰ فایل قطع می‌شوند. اگر به سقف بخورد، Claude یک پرچمِ قطع‌شدن را در نتیجه می‌بیند و می‌تواند الگو را تنگ‌تر کند.

Glob به‌طور پیش‌فرض به .gitignore احترام نمی‌گذارد، پس فایل‌های gitignore‌شده را در کنارِ ردیابی‌شده‌ها پیدا می‌کند. این با Grep فرق دارد، که فایل‌های gitignore‌شده را رد می‌کند. برای اینکه Glob به .gitignore احترام بگذارد، CLAUDE_CODE_GLOB_NO_IGNORE=false را پیش از راه‌اندازیِ Claude Code تنظیم کن.

ابزارِ Grep محتوای فایل‌ها را دنبالِ الگو می‌گردد. جایی که Glob فایل‌ها را با نام پیدا می‌کند، Grep خط‌های داخلشان را پیدا می‌کند.

Grep روی ripgrep ساخته شده و از نحوِ regexِ ripgrep استفاده می‌کند، نه POSIX grep. الگوهایی که شاملِ متاکاراکترهای regex‌اند به escape نیاز دارند. مثلاً یافتنِ interface{} در کدِ Go الگوی interface\{\} را می‌خواهد.

سه حالتِ خروجی کنترل می‌کنند چه چیزی برمی‌گردد:

  • files_with_matches: فقط مسیرهای فایل، بدونِ محتوای خط. این پیش‌فرض است.
  • content: خط‌های منطبق با نامِ فایل و شماره‌ی خط.
  • count: تعدادِ تطابق به‌ازای هر فایل.

Claude می‌تواند نتایج را با پارامترِ glob، مثلِ **/*.tsx، با فایل دامنه‌بندی کند، یا با پارامترِ type، مثلِ py یا rust، با زبان. به‌طور پیش‌فرض، الگوها در داخلِ یک خطِ واحد تطبیق داده می‌شوند. Claude می‌تواند multiline: true را تنظیم کند تا در مرزهای خط تطبیق دهد.

Grep به .gitignore احترام می‌گذارد، پس فایل‌های gitignore‌شده رد می‌شوند. برای جست‌وجوی یک فایلِ gitignore‌شده، Claude مسیرش را مستقیم می‌دهد.

ابزارِ LSP به Claude هوشِ کد از یک language serverِ در حالِ اجرا می‌دهد. بعد از هر ویرایشِ فایل، به‌طور خودکار خطاهای نوع و هشدارها را گزارش می‌دهد تا Claude بتواند مشکلات را بدونِ یک مرحله‌ی build جداگانه رفع کند. Claude می‌تواند آن را مستقیم هم برای پیمایشِ کد صدا بزند:

  • پرش به تعریفِ یک نماد
  • یافتنِ همه‌ی ارجاع‌ها به یک نماد
  • گرفتنِ اطلاعاتِ نوع در یک موقعیت
  • فهرست‌کردنِ نمادها در یک فایل
  • جست‌وجوی یک نماد با نام در سراسرِ فضای کاری
  • یافتنِ پیاده‌سازی‌های یک interface
  • ردیابیِ سلسله‌مراتبِ فراخوانی

این ابزار تا وقتی یک پلاگینِ هوشِ کد برای زبانت نصب نکنی غیرفعال است. پلاگین پیکربندیِ language server را همراه دارد، و باینریِ سرور را جداگانه نصب می‌کنی.

ابزارِ Monitor به Claude اجازه می‌دهد چیزی را در پس‌زمینه تماشا کند و وقتی تغییر کرد واکنش نشان دهد، بدونِ مکثِ گفت‌وگو. از Claude بخواه:

  • یک فایلِ لاگ را tail کند و خطاها را همان‌طور که ظاهر می‌شوند علامت بزند
  • یک PR یا کارِ CI را poll کند و وقتی وضعیتش تغییر کرد گزارش دهد
  • یک پوشه را برای تغییراتِ فایل تماشا کند
  • خروجیِ هر اسکریپتِ طولانی‌ای که به آن اشاره می‌کنی را ردیابی کند

Claude یک اسکریپتِ کوچک برای تماشا می‌نویسد، در پس‌زمینه اجرایش می‌کند، و هر خطِ خروجی را همان‌طور که می‌رسد دریافت می‌کند. تو در همان نشست به کار ادامه می‌دهی و Claude وقتی رویدادی فرود می‌آید مداخله می‌کند. یک monitor را با درخواست از Claude برای لغوش یا با پایان‌دادن به نشست متوقف کن.

Monitor از همان قواعدِ دسترسیِ Bash استفاده می‌کند، پس الگوهای allow و deny که برای Bash تنظیم کرده‌ای اینجا هم اعمال می‌شوند. روی Amazon Bedrock، Google Vertex AI یا Microsoft Foundry در دسترس نیست. همچنین وقتی DISABLE_TELEMETRY یا CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC تنظیم شده باشد در دسترس نیست.

پلاگین‌ها می‌توانند monitorهایی اعلام کنند که وقتی پلاگین فعال است به‌طور خودکار شروع می‌شوند، به‌جای درخواست از Claude برای شروعشان. monitorهای پلاگین را ببین.

NotebookEdit یک نوت‌بوکِ Jupyter را هر بار یک سلول تغییر می‌دهد، و سلول‌ها را با cell_idشان هدف می‌گیرد. مثلِ Edit روی فایل‌های ساده، در سراسرِ نوت‌بوک جایگزینیِ رشته انجام نمی‌دهد.

سه حالتِ ویرایش کنترل می‌کنند چه اتفاقی برای سلولِ هدف می‌افتد:

  • replace: منبعِ سلول را بازنویسی کن. این پیش‌فرض است.
  • insert: یک سلولِ جدید بعد از هدف اضافه کن. بدونِ cell_id، سلولِ جدید در ابتدای نوت‌بوک قرار می‌گیرد. به cell_type که روی code یا markdown تنظیم شده نیاز دارد.
  • delete: سلولِ هدف را حذف کن.

قواعدِ دسترسی از قالبِ مسیرِ Edit(...) استفاده می‌کنند. قاعده‌ای مثلِ Edit(notebooks/**) فراخوانی‌های NotebookEdit روی فایل‌های آن پوشه را پوشش می‌دهد.

ابزارِ PowerShell به Claude اجازه می‌دهد دستورهای PowerShell را به‌صورتِ بومی اجرا کند. روی Windows، این یعنی دستورها در PowerShell اجرا می‌شوند به‌جای مسیریابی از طریقِ Git Bash. روی Windows بدونِ Git Bash، ابزار به‌طور خودکار فعال است. روی Windows با Git Bashِ نصب‌شده، ابزار به‌تدریج در حالِ عرضه است. روی Linux، macOS و WSL، ابزار اختیاری است.

فعال‌کردنِ ابزارِ PowerShell

Section titled “فعال‌کردنِ ابزارِ PowerShell”

CLAUDE_CODE_USE_POWERSHELL_TOOL=1 را در محیطت یا در settings.json تنظیم کن:

{
"env": {
"CLAUDE_CODE_USE_POWERSHELL_TOOL": "1"
}
}

روی Windows، متغیر را روی 0 بگذار تا از عرضه انصراف بدهی. روی Linux، macOS و WSL، ابزار به PowerShell 7 یا بالاتر نیاز دارد: pwsh را نصب کن و مطمئن شو روی PATHت هست.

روی Windows، Claude Code به‌طور خودکار pwsh.exe را برای PowerShell 7+ تشخیص می‌دهد با fallback به powershell.exe برای PowerShell 5.1. وقتی ابزار فعال است، Claude با PowerShell به‌عنوانِ شلِ اصلی رفتار می‌کند. ابزارِ Bash برای اسکریپت‌های POSIX وقتی Git Bash نصب باشد در دسترس می‌ماند.

Claude Code، PowerShell را با -ExecutionPolicy Bypass فقط در سطحِ فرایند ایجاد می‌کند، پس اسکریپت‌های .ps1 و importهای ماژول روی نصب‌های پیش‌فرضِ Windows بدونِ تغییرِ سیاستِ دستگاه کار می‌کنند. bypassِ سطحِ فرایند، Group Policyِ MachinePolicy یا UserPolicy را override نمی‌کند، پس قفل‌های سازمانی همچنان اعمال می‌شوند. برای اینکه به‌جایش به سیاستِ اجرای مؤثرِ دستگاه احترام بگذاری، CLAUDE_CODE_POWERSHELL_RESPECT_EXECUTION_POLICY=1 را تنظیم کن.

انتخابِ شل در تنظیمات، hookها و skillها

Section titled “انتخابِ شل در تنظیمات، hookها و skillها”

سه تنظیمِ اضافی کنترل می‌کنند PowerShell کجا استفاده می‌شود:

  • "defaultShell": "powershell" در settings.json: دستورهای تعاملیِ ! را از طریقِ PowerShell مسیریابی می‌کند. به فعال‌بودنِ ابزارِ PowerShell نیاز دارد.
  • "shell": "powershell" روی command hookهای منفرد: آن hook را در PowerShell اجرا می‌کند. hookها PowerShell را مستقیم ایجاد می‌کنند، پس این صرف‌نظر از CLAUDE_CODE_USE_POWERSHELL_TOOL کار می‌کند.
  • shell: powershell در frontmatterِ skill: بلاک‌های !`command` را در PowerShell اجرا می‌کند. به فعال‌بودنِ ابزارِ PowerShell نیاز دارد.

همان رفتارِ ری‌ستِ پوشه‌ی کاریِ نشستِ اصلی که زیرِ بخشِ ابزارِ Bash توصیف شد، به دستورهای PowerShell هم اعمال می‌شود، از جمله متغیرِ محیطیِ CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR.

محدودیت‌های پیش‌نمایش

Section titled “محدودیت‌های پیش‌نمایش”

ابزارِ PowerShell در طولِ پیش‌نمایش محدودیت‌های شناخته‌شده‌ی زیر را دارد:

  • پروفایل‌های PowerShell بارگذاری نمی‌شوند
  • روی Windows، sandboxing پشتیبانی نمی‌شود

ابزارِ Read یک مسیرِ فایل می‌گیرد و محتوا را با شماره‌ی خط برمی‌گرداند. به Claude دستور داده شده همیشه مسیرهای مطلق بدهد.

به‌طور پیش‌فرض، Read فایل را از ابتدا برمی‌گرداند. وقتی خواندنِ کلِ فایل از محدودیتِ توکن فراتر برود، Read صفحه‌ی اول را با اعلانِ PARTIAL view برمی‌گرداند که به Claude می‌گوید چه مقدار از فایل را دریافت کرده و چطور با offset و limit بیشتر بخواند. خواندنی که یک offset یا limit صریح می‌دهد و باز هم از محدودیتِ توکن فراتر می‌رود، خطا برمی‌گرداند.

Read چند نوعِ فایل را فراتر از متنِ ساده مدیریت می‌کند:

  • تصاویر: PNG، JPG و دیگر فرمت‌های تصویر به‌صورتِ محتوای بصری که Claude می‌تواند ببیند برگردانده می‌شوند، نه به‌صورتِ بایتِ خام. Claude Code تصاویرِ بزرگ را پیش از ارسال، تغییرِ اندازه و بازفشرده می‌کند تا در محدودیت‌های اندازه‌ی تصویرِ مدل جا شوند، پس Claude ممکن است نسخه‌ای کوچک‌شده از یک اسکرین‌شاتِ بزرگ ببیند. اگر Claude جزئیاتِ ریزِ پیکسلیِ یک تصویرِ بزرگ را از دست داد، از آن بخواه اول ناحیه‌ی موردِ نظر را crop کند، مثلاً با ImageMagick از طریقِ Bash.
  • PDFها: Claude فایل‌های .pdf کوتاه را کامل می‌خواند. برای PDFهای بلندتر از ۱۰ صفحه، با یک پارامترِ pages در بازه‌ها می‌خواند، مثلِ "1-5"، تا ۲۰ صفحه در هر بار.
  • نوت‌بوک‌های Jupyter: فایل‌های .ipynb همه‌ی سلول‌ها را با خروجی‌هایشان برمی‌گردانند، شاملِ کد، markdown و مصورسازی‌ها.

Read فقط فایل‌ها را می‌خواند، نه پوشه‌ها را. Claude از ls از طریقِ ابزارِ Bash برای فهرست‌کردنِ محتوای پوشه استفاده می‌کند.

WebFetch یک URL و یک پرامپت که توصیف می‌کند چه چیزی استخراج شود می‌گیرد. صفحه را واکشی می‌کند، وقتی سرور HTML برمی‌گرداند پاسخ را به Markdown تبدیل می‌کند، و پرامپت را با استفاده از یک مدلِ کوچک و سریع روی محتوا اجرا می‌کند. برای بیشترِ واکشی‌ها، Claude پاسخِ آن مدل را دریافت می‌کند، نه صفحه‌ی خام را. مرحله‌ی تبدیل قابلِ پیکربندی نیست.

این WebFetch را طبقِ طراحی پُراتلاف (lossy) می‌کند. پرامپتِ استخراج تعیین می‌کند چه چیزی به Claude می‌رسد، پس نتیجه‌ای که می‌گوید صفحه چیزی را ذکر نمی‌کند ممکن است فقط به این معنا باشد که پرامپت درباره‌اش نپرسیده. از Claude بخواه دوباره با پرامپتِ مشخص‌تری واکشی کند، یا از curl از طریقِ Bash برای صفحه‌ی پردازش‌نشده استفاده کن.

چند رفتار، پاسخی را که Claude دریافت می‌کند شکل می‌دهند:

  • URLهای HTTP به‌طور خودکار به HTTPS ارتقا می‌یابند.
  • صفحه‌های بزرگ پیش از پردازش به یک محدودیتِ کاراکترِ ثابت قطع می‌شوند.
  • پاسخ‌ها ۱۵ دقیقه کش می‌شوند، پس واکشی‌های مکررِ همان URL سریع برمی‌گردند.
  • وقتی یک URL به یک میزبانِ متفاوت redirect می‌کند، WebFetch به‌جای دنبال‌کردنش، یک نتیجه‌ی متنی برمی‌گرداند که URLِ اصلی و هدفِ redirect را نام می‌برد. بعد Claude با یک فراخوانیِ دومِ WebFetch، URLِ جدید را واکشی می‌کند.

در حالت‌های دسترسیِ پیش‌فرض و acceptEdits، WebFetch اولین باری که به یک دامنه‌ی جدید می‌رسد پرامپت می‌دهد، به‌جز یک مجموعه‌ی داخلیِ دامنه‌های مستنداتِ ازپیش‌تأییدشده که بدونِ پرامپت واکشی می‌شوند. برای اجازه‌دادن به دامنه‌ای دیگر از پیش و بدونِ پرامپت، یک قاعده‌ی دسترسی مثلِ WebFetch(domain:example.com) اضافه کن. حالت‌های دسترسیِ auto و bypassPermissions پرامپت را کاملاً رد می‌کنند.

یک قاعده‌ی صریحِ WebFetch(domain:...) در deny، ask یا allow بر مجموعه‌ی ازپیش‌تأییدشده اولویت دارد، پس می‌توانی یک دامنه‌ی ازپیش‌تأییدشده را مسدود کنی یا برایش پرامپت بخواهی.

WebFetch یک هدرِ User-Agent تنظیم می‌کند که با Claude-User شروع می‌شود، و یک هدرِ Accept که Markdown را بر HTML ترجیح می‌دهد تا سرورهایی که از content negotiation پشتیبانی می‌کنند بتوانند مستقیم Markdown برگردانند. قواعدِ شبکه‌ی Sandbox جداگانه پیکربندی می‌شوند، پس دامنه‌ای که می‌خواهی یک فرایندِ sandbox‌شده به آن برسد باز هم به یک قاعده‌ی دسترسیِ sandboxِ صریح نیاز دارد.

WebSearch یک query را در برابرِ بک‌اندِ web searchِ Anthropic اجرا می‌کند و عنوان‌ها و URLهای نتایج را برمی‌گرداند. صفحه‌های نتیجه را واکشی نمی‌کند. برای خواندنِ صفحه‌ای که Claude در نتایجِ جست‌وجو پیدا می‌کند، با WebFetch دنبالش می‌کند.

ابزار ممکن است تا هشت جست‌وجوی بک‌اند به‌ازای هر فراخوانی صادر کند، و پیش از برگرداندنِ نتایج، جست‌وجو را به‌صورتِ داخلی پالایش کند. Claude می‌تواند نتایج را با allowed_domains دامنه‌بندی کند تا فقط میزبان‌های مشخصی را شامل شود، یا با blocked_domains تا آن‌ها را کنار بگذارد. این دو فهرست را نمی‌توان در یک فراخوانیِ واحد ترکیب کرد.

بک‌اندِ جست‌وجو قابلِ پیکربندی نیست. برای جست‌وجو با یک ارائه‌دهنده‌ی متفاوت، یک سرورِ MCP اضافه کن که یک ابزارِ جست‌وجو را افشا می‌کند.

قواعدِ دسترسیِ WebSearch هیچ specifierی نمی‌گیرند. یک ورودیِ خالیِ WebSearch در allow یا deny تنها شکلِ آن است.

ابزارِ Write یک فایلِ جدید می‌سازد یا یک فایلِ موجود را با محتوای کاملِ داده‌شده بازنویسی می‌کند. append یا merge نمی‌کند.

اگر مسیرِ هدف از قبل وجود داشته باشد، Claude باید آن فایل را پیش از بازنویسی حداقل یک‌بار در گفت‌وگوی فعلی خوانده باشد. یک Write روی فایلِ موجودِ خوانده‌نشده با خطا شکست می‌خورد. این قید برای فایل‌های جدید اعمال نمی‌شود.

دیدنِ فایل با Bash هم این نیازمندی را تحتِ همان قواعدِ توصیف‌شده در رفتارِ ابزارِ Edit برآورده می‌کند.

برای تغییراتِ جزئی روی یک فایلِ موجود، Claude به‌جای Write از Edit استفاده می‌کند.

بررسی اینکه کدام ابزارها در دسترس‌اند

Section titled “بررسی اینکه کدام ابزارها در دسترس‌اند”

مجموعه‌ی دقیقِ ابزارهایت به ارائه‌دهنده، پلتفرم و تنظیماتت بستگی دارد. برای بررسیِ اینکه در یک نشستِ در حالِ اجرا چه چیزی بارگذاری شده، مستقیم از Claude بپرس:

What tools do you have access to?

Claude یک خلاصه‌ی گفت‌وگویی می‌دهد. برای نام‌های دقیقِ ابزارهای MCP، /mcp را اجرا کن.

  • سرورهای MCP: با اتصالِ سرورهای بیرونی، ابزارهای سفارشی اضافه کن
  • دسترسی‌ها: سیستمِ دسترسی، نحوِ قاعده، و الگوهای مخصوصِ هر ابزار
  • ساب‌ایجنت‌ها: دسترسیِ ابزار را برای ساب‌ایجنت‌ها پیکربندی کن
  • Hooks: دستورهای سفارشی را پیش یا پس از اجرای ابزار اجرا کن