מדריך קלוד קוד בעברית

תיעוד 91

הפניה ל-marketplace

הפניה מלאה לשדות של marketplace.json, לרשומות תוספים, ולאובייקטי המקור של תוסף ושל marketplace, כולל היכן כל אחד מהם תקף.

marketplace.json הוא הקובץ שמגדיר marketplace של תוספים. הוא מכיל את שם ה-marketplace, את הבעלים שלו, ורשומה אחת לכל תוסף. מקור התוסף של כל רשומה אומר מאיפה Claude Code מביא את התוסף הזה.

מקור marketplace הוא אובייקט נפרד שאומר מאיפה Claude Code מביא את קובץ ה-marketplace עצמו. כותבים אחד כזה בהגדרות, או ש-Claude Code בונה אחד כשמריצים claude plugin marketplace add.

ההפניה הזו מיועדת למתחזקי marketplace שצריכים שם שדה או ערך מדויק, ולמנהלים שצריכים לדעת אילו ערכי source תקפים ב-extraKnownMarketplaces, ב-strictKnownMarketplaces, וב-blockedMarketplaces.

[!NOTE]

המקרים האלה מכוסים בדפים אחרים:

מצאו את הסעיף לפי מה שאתם כותבים או קוראים:

#קובץ ה-marketplace

שמרו את קובץ ה-marketplace ב-.claude-plugin/marketplace.json בתיקייה של ה-marketplace. אם שומרים את הקובץ במקום אחר במאגר, המשתמשים צריכים להצהיר על ה-marketplace ב-extraKnownMarketplaces עם path שמוגדר על המקור שלו, כי ל-claude plugin marketplace add אין אפשרות לזה.

התיקייה שמכילה את .claude-plugin/ נקראת שורש ה-marketplace, וכל מקור תוסף יחסי נפתר ממנה, לא מתוך .claude-plugin/.

כל משתמש רושם marketplace אחד לכל name, ולכן משתמש לא יכול לרשום שני marketplaces עם אותו שם באותו זמן.

Claude Code מתעלם ממפתח לא מוכר ברמה העליונה או ממפתח לא מוכר ברשומת תוסף, בלי לדחות את הקובץ, ולכן שגיאת כתיב נטענת בשקט. claude plugin validate מדווח על כל מפתח לא מוכר כאזהרה.

#שמות שמורים

אי אפשר לתת ל-marketplace אחד מהשמות הבאים:

  • שמות marketplace רשמיים: claude-code-marketplace, claude-code-plugins, claude-plugins-official, anthropic-marketplace, anthropic-plugins, agent-skills, anthropic-agent-skills, life-sciences, knowledge-work-plugins, claude-for-legal, claude-for-financial-services, financial-services-plugins, first-party-plugins, ו-claude-tag-plugins. שמורים, אלא אם ה-marketplace מגיע ממקור marketplace מסוג github או git תחת github.com/anthropics/.
  • שמות marketplace של הקהילה: claude-community, claude-plugins-community, ו-healthcare. שמורים לפי אותו כלל כמו השמות הרשמיים.
  • שמות של תיקיות תוספים: anthropic-plugin-directory ו-claude-plugin-directory. שמורים לפי אותו כלל כמו השמות הרשמיים.
  • שמות שמתחזים ל-marketplace רשמי: שמות כמו official-claude-plugins או claude-plugins-v2, וכל שם שמכיל תו שאינו ASCII. השגיאה היא Marketplace name impersonates an official Anthropic/Claude marketplace. תו בקרה או תו עיצוב דו כיווני בשם מדווח גם Marketplace name cannot contain control or bidirectional-formatting characters. marketplace שכבר רשום תחת שם כזה מפסיק להיטען, יחד עם התוספים שלו.
  • איות אחר של שם שמור: שם שנבדל משם שמור רק בנקודה בסוף, או בסימן שאינו קו תחתון במקום מקף, כך ש-claude.code.plugins נחשב כ-claude-code-plugins. הוספת ה-marketplace נכשלת עם is another spelling of "<reserved>", a reserved marketplace name, ו-marketplace שכבר רשום תחת שם כזה מפסיק להיטען. הבדיקה הזו דורשת Claude Code v2.1.280 או גרסה מאוחרת יותר.
  • שמות ש-Claude Code משתמש בהם לתוספים שלא מגיעים מ-marketplace: inline לתוספים שנטענים עם --plugin-dir, builtin לתוספים מובנים, skills-dir לתוספים שנטענים אוטומטית מ-.claude/skills/, ו-synced לתוספים שמסונכרנים מחשבון claude.ai. גם claude-plugin-test שמור. skills-dir מופיע גם כ-{"source": "skills-dir"} ב-strictKnownMarketplaces וב-blockedMarketplaces, כפי שמתואר תחת ערכי מקור שתקפים רק ברשימות מדיניות.
  • npm, pip, uv, cargo, github, ו-gh: שמורים בכל צורת אותיות. הבדיקה הזו דורשת Claude Code v2.1.275 או גרסה מאוחרת יותר.
  • שמות של חברים שיש לכל אובייקט JavaScript: constructor, hasOwnProperty, isPrototypeOf, propertyIsEnumerable, toLocaleString, toString, ו-valueOf. claude plugin marketplace add מסרב ל-marketplace שמשתמש באחד מהם עם Claude Code reserves this name and cannot register a marketplace under it. הבדיקה הזו דורשת Claude Code v2.1.296 או גרסה מאוחרת יותר.
  • שמות שמתחילים ב-claudeai-: שמורים ל-marketplaces שמתארחים ב-claude.ai. claude plugin marketplace add מסרב לכל marketplace אחר שמשתמש בשם כזה עם Cannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.ai.
  • תיקיית ההורדה של marketplace רשום מ-GitHub, <owner>-<repo>: Claude Code מוריד marketplace שנוסף ממקור github כמו acme/x-tools דרך תיקייה בשם acme-x-tools, יהיה אשר יהיה ה-name של ה-marketplace עצמו. כל עוד ה-marketplace הזה רשום בשם שונה מ-acme-x-tools, claude plugin marketplace add מסרב ל-marketplace אחר בשם acme-x-tools אחרי ההורדה, ומדווח Can't use the marketplace name "acme-x-tools". הבדיקה הזו דורשת Claude Code v2.1.290 או גרסה מאוחרת יותר.

כש-marketplace רשום מפסיק להיטען כי השם שלו מחקה שם רשמי, claude plugin list ו-/plugin מדווחים Claude Code refuses the marketplace name "<name>". ההודעה אומרת להסיר את ה-marketplace. ההסרה גם מסירה את התוספים שלו ומוחקת את הנתונים, האפשרויות והסודות שלהם. הודעת הסירוב עם השם דורשת Claude Code v2.1.282 או גרסה מאוחרת יותר.

אם קובץ הגדרות מצהיר על ה-marketplace בתוך הקובץ, ההודעה אומרת לשנות את שם הרשומה לפני שמסירים את השם הישן. לשלבים, ראו Claude Code מסרב לשם ה-marketplace. ההודעה מפרטת אותם ב-Claude Code v2.1.292 או גרסה מאוחרת יותר.

#שדות ברמה העליונה

הטבלה מפרטת כל מפתח ש-Claude Code קורא מ-marketplace.json. name, owner, ו-plugins הם שדות חובה.

שדהסוגתיאור
namestringמזהה ה-marketplace: אותיות, ספרות, ., _, ו--, שמתחיל באות או בספרה, ובלי ... claude plugin validate נכשל על כל שם אחר, כי Claude Code לא יכול להתקין תוספים מ-marketplace שמשתמש בשם כזה. המשתמשים מקלידים את השם אחרי @ ב-מזהה תוסף כמו my-plugin@my-marketplace כשהם מתקינים תוסף. ראו שמות שמורים
ownerobjectפרטי המתחזק. name הוא שדה חובה. email ו-url הם אופציונליים
pluginsarrayרשומות תוספים. כל רשומה מאומתת בפני עצמה, ולכן רשומה לא תקינה אחת לא מפילה את ה-marketplace
$schemastringכתובת JSON Schema להשלמה אוטומטית בעורך. מתעלמים ממנה בזמן הטעינה
descriptionstringתיאור ה-marketplace שמוצג למשתמשים. claude plugin validate מזהיר כשהוא חסר
versionstringגרסת מניפסט ה-marketplace
metadata.description, metadata.versionstringמיקום חלופי ל-description ול-version
metadata.pluginRootstringתיקייה שתחתיה נפתחים שמות מקור תוסף חשופים. ראו מקור תוסף בנתיב יחסי. דורש Claude Code v2.1.239 או גרסה מאוחרת יותר
forceRemoveDeletedPluginsbooleanכשהערך הוא true, תוסף שמסירים מ-plugins מוסר מההתקנה במחשבים של המשתמשים. ראו אירוח ותחזוקה של marketplace
allowCrossMarketplaceDependenciesOnarray of stringsשמות marketplace שהתוספים שלהם מותרים להתקנה כתלויות של התוספים של ה-marketplace הזה. כשמתקינים תוסף, רק הרשימה ב-marketplace של התוסף עצמו חלה, על כל שרשרת התלויות שלו. ראו תלויות תוספים
renamesobjectמיפוי מ-name קודם של תוסף לשם הנוכחי שלו, או ל-null לתוסף שהוסר. ראו אירוח ותחזוקה של marketplace

#רשומות תוספים

כל אובייקט במערך plugins ברמה העליונה של marketplace.json נותן שם לתוסף ואומר מאיפה להביא אותו. name ו-source הם שדות חובה.

מלבד שדות רישום התיקייה, רשומה מקבלת גם כל שדה של plugin.json, כמו description, version, author, commands, ו-hooks. מתי השדות האלה חלים, ראו איך רשומה משתלבת עם plugin.json.

הטבלה מפרטת את השדות של הרשומה עצמה ואת שדות המניפסט שהמשמעות שלהם משתנה ברשומה.

שדהסוגתיאור
namestringמזהה התוסף: אותיות, ספרות, ., _, ו--, שמתחיל באות או בספרה. claude plugin validate נכשל על שמות אחרים, ש-Claude Code לא יכול להתקין. המשתמשים מקלידים אותו לפני @ כשהם מתקינים, גם כש-plugin.json של התוסף עצמו מגדיר name אחר
sourcestring או objectמאיפה להביא את התוסף. ראו מקורות תוסף
descriptionstringמוצג ברשימות ובפרטים של /plugin
versionstringמחרוזת גרסה לתוסף. כש-plugin.json גם מגדיר version, plugin.json גובר ו-claude plugin validate מזהיר. ראו הפניה לטעינת תוספים
categorystringקטגוריה חופשית לארגון הקטלוג
tagsarray of stringsתגיות חופשיות לחיפוש
strictbooleanברירת המחדל true. האם plugin.json הוא המקור הקובע לרכיבי התוסף. ראו מצב strict
relevanceobjectאותות שאומרים ל-Claude Code מתי להציע את התוסף. ראו המלצה על תוספים לארגון
dependenciesarrayתוספים שחייבים להיות מופעלים כדי שהתוסף הזה יעבוד. כל פריט הוא "name", "name@marketplace", או אובייקט. ראו תלויות תוספים
defaultEnabledbooleanברירת המחדל true. האם התוסף מתחיל כמופעל כשהמשתמש לא הגדיר אותו ב-enabledPlugins. ערך הרשומה גובר על plugin.json
displayNamestringשם קריא שמוצג בממשק. כשגם הרשומה וגם plugin.json של התוסף לא מגדירים אחד, המשתמשים רואים את ה-name של התוסף
metadataobjectאובייקט חופשי לשדות משלכם. Claude Code לא קורא אותו. דורש Claude Code v2.1.222 או גרסה מאוחרת יותר
headersobjectכותרות HTTP ש-Claude Code שולח כשהוא מוריד את ה-archive של הרשומה הזו. כותרת שמוגדרת כאן מחליפה כותרת באותו שם מ-headers של מקור ה-marketplace. דורש Claude Code v2.1.238 או גרסה מאוחרת יותר
headersHelperstringפקודה שמדפיסה את כותרות הורדת ה-archive של הרשומה הזו כאובייקט JSON אחד, עבור אישור שפג תוקפו. הרשומה חייבת גם להגדיר "strict": false. דורש Claude Code v2.1.238 או גרסה מאוחרת יותר. ראו אימות הורדות archive

#איך רשומה משתלבת עם plugin.json

השדות של הרשומה חלים אחרת על תוסף שהובא ויש לו .claude-plugin/plugin.json משלו, ועל תוסף שאין לו:

  • אין plugin.json: הרשומה היא המניפסט, בלי קשר ל-strict. כל שדה מניפסט שהרשומה מקבלת חל, כולל mcpServers, lspServers, userConfig, ו-channels.
  • יש plugin.json: plugin.json הוא המניפסט. מצב strict קובע אם ששת שדות הרכיבים של הרשומה, commands, agents, skills, hooks, outputStyles, ו-themes, משולבים איתו או נדחים כהתנגשות. mcpServers, lspServers, userConfig, ו-channels של הרשומה לא חלים. מצהירים עליהם ב-plugin.json.

#hooks ברשומה

כתבו את hooks של הרשומה כאובייקט בתוך השורה שממפה שמות אירועי hook למערכי matcher. אם כותבים נתיב קובץ או מערך, claude plugin validate מעביר את זה. ה-hooks האלה אף פעם לא רצים, ו-Claude Code מדווח על שגיאה not yet supported in a marketplace entry לתוסף. שימו hooks מבוססי קובץ ב-hooks/hooks.json של התוסף עצמו או ב-plugin.json.

#שדות תצוגה

גם הרשומה וגם plugin.json של התוסף עצמו יכולים להגדיר את שדות התצוגה displayName, description, author, homepage, repository, license, ו-keywords. המשתמשים רואים את הערכים האלה ברשימות התוספים ובפרטים, לפני ההתקנה ואחריה:

  • לשדה שהגדרתם ברשומה, המשתמשים רואים את ערך הרשומה, גם כש-plugin.json מגדיר ערך אחר.
  • לשדה שהרשומה משאירה בלי ערך, המשתמשים רואים את הערך מ-plugin.json.

לפני ההתקנה, Claude Code יכול לקרוא את plugin.json רק לרשומות עם מקור בנתיב יחסי, שקבצי התוסף שלהן נמצאים בתוך ה-marketplace עצמו. לרשומה עם כל סוג מקור אחר, המשתמשים רואים רק את השדות של הרשומה עצמה עד שהם מתקינים את התוסף.

#מצב strict

strict קובע מה קורה כשלתוסף שהובא יש plugin.json משלו והרשומה גם מצהירה על אחד משדות הרכיבים: commands, agents, skills, hooks, outputStyles, או themes. עם strict: true, ברירת המחדל, Claude Code מצרף את שדות הרכיבים של הרשומה ל-plugin.json, חוץ מ-hooks, שה-matchers שלו מחליפים את אלה של המניפסט לכל אירוע. עם strict: false, רשומה שמצהירה על שדה רכיב כלשהו היא התנגשות, והתוסף נכשל בטעינה. הטבלה מציגה כל שילוב של strict, plugin.json, ושדות הרכיבים של הרשומה.

strictplugin.jsonשדות רכיבים ברשומהתוצאה
כל ערךחסרכל ערךהרשומה היא המניפסט
true, ברירת המחדלקייםכל ערךplugin.json הוא הסמכות. Claude Code מצרף אליו את שדות הרכיבים של הרשומה, חוץ מ-hooks, שה-matchers שלו מחליפים את אלה של המניפסט לכל אירוע
falseקייםאיןplugin.json הוא המניפסט, כמו עם true
falseקייםאחד או יותרהתנגשות. התוסף נכשל בטעינה עם Plugin <name> has conflicting manifests: both plugin.json and marketplace entry specify components

#מקורות תוסף

השדה source ברשומת תוסף אומר מאיפה Claude Code מביא את התוסף האחד הזה. זה מחרוזת של נתיב יחסי, או אובייקט שהמפתח source שלו מציין את הסוג, כך שרשומה נראית כך: "source": { "source": "github", "repo": "your-org/formatter" }.

הטבלה מפרטת כל סוג מקור תוסף ואת השדות שלו.

סוגשדותהערות
נתיב יחסיהמחרוזת עצמהספרייה בתוך השוק, שמתפרשת משורש השוק. חייבת להתחיל ב-./, אלא אם כותבים שם חשוף תחת metadata.pluginRoot. "." לבדו פירושו השורש עצמו
githubrepo, ref, shaמאגר GitHub בצורה owner/repo
urlurl, ref, shaכל מאגר git לפי כתובת URL
git-subdirurl, path, ref, shaתת-ספרייה אחת של מאגר git, שמביאים עם sparse checkout
npmpackage, version, registryחבילת npm registry או קישור tarball, שמביאים עם לקוח ה-npm ופורקים בלי להריץ סקריפטי התקנה
archiveurl, sha256ארכיון Zip על HTTPS. דורש Claude Code מגרסה v2.1.224 ואילך
commandcommand, timeout, modeספרייה שפקודה ש-Claude Code מריץ על המחשב של המשתמש מדפיסה. דורש Claude Code מגרסה v2.1.229 ואילך

השמות url ו-github הם גם סוגי מקור שוק, שבהם url פירושו קישור ישיר לקובץ marketplace.json ולא למאגר git. git קיים רק כמקור שוק, ו-npm קיים כשניהם. git-subdir, archive ו-command קיימים רק כמקורות תוסף.

השתמשו בנתיב יחסי לתוסף שנמצא בתת-ספרייה של מאגר השוק עצמו. השתמשו ב-git-subdir לתת-ספרייה של מאגר אחר.

מקורות github, url ו-git-subdir חולקים את השדות ref ו-sha:

  • ref: ענף או תג. ברירת המחדל היא ענף ברירת המחדל של המאגר.
  • sha: SHA מלא של commit באורך 40 תווים באותיות קטנות. כשמגדירים גם ref וגם sha, Claude Code עושה checkout ל-sha. ברוב מארחי git, כולל GitHub, GitLab ו-Bitbucket, זה אומר שההתקנה מצליחה גם אם הענף או התג ש-ref מציין נמחק מאז במעלה הזרם, כל עוד ה-commit עדיין נגיש מהמאגר. חלק מהשרתים, כמו AWS CodeCommit, לא תומכים בהבאת commits לפי SHA. בשרתים האלה ref עדיין חייב להתקיים, וה-commit הנעוץ חייב להיות נגיש ממנו.

לאופן שבו כל סוג מובא, נשמר במטמון ומקבל גרסה, ראו הפניה לטעינת תוספים.

#מקור תוסף מסוג נתיב יחסי

הנתיב מתפרש משורש השוק. ./plugins/formatter הוא <root>/plugins/formatter גם כשקובץ השוק נמצא ב-<root>/.claude-plugin/.

נתיב שמכיל .. נכשל באימות. ב-macOS וב-Linux, Claude Code דוחה נתיב רשומה שמכיל לוכסן הפוך בכל מקום אחרי ./ הפותח, לכן כתבו את הנתיב עם לוכסנים קדימה.

{ "name": "formatter", "source": "./plugins/formatter" }

נתיב יחסי מתפרש רק כשל-Claude Code יש את קבצי השוק, לכן בדקו את סוג מקור השוק:

  • github, git, file ו-directory: ל-Claude Code יש את קבצי השוק.
  • url: Claude Code מביא רק את marketplace.json, ולכן נתיבים יחסיים לא יכולים להתפרש. תנו לכל תוסף מקור שהוא אובייקט, כגון github או git-subdir.
  • settings: נתיבים יחסיים נדחים לגמרי.

#תת-מודולי git במאגר השוק

כש-Claude Code משכפל מאגר שוק, הוא מביא רק את תת-המודולים של git שמכילים קבצי תוסף. דורש Claude Code מגרסה v2.1.295 ואילך.

גרסאות קודמות מביאות כל תת-מודול, כולל מקוננים. אם במאגר יש תת-מודול גדול, Claude Code יכול אז לעבור את זמן הקצוב לשכפול בזמן שהוא מביא אותו.

לתוסף בתת-ספרייה, כגון ./plugins/formatter, Claude Code מביא תת-מודול במקרים האלה:

  • התוסף נמצא בתוך תת-המודול: תת-המודול הוא ספריית התוסף או ספרייה מעליה
  • תת-המודול נמצא בתוך התוסף: תת-המודול נמצא בכל מקום תחת ספריית התוסף
  • קישור סמלי מצביע לתוך תת-המודול: קישור שאוחסן במאגר, והיעד שלו נמצא בתת-המודול

תוסף בשורש השוק, עם "source": "./", מקבל כל תת-מודול במאגר או אף אחד מהם. Claude Code מביא כל תת-מודול כשאחד מאלה מצביע לתוך תת-מודול כלשהו:

  • ספריית רכיב: ספרייה בשורש שמחזיקה רכיבי תוסף, כגון skills/, hooks/ או bin/
  • נתיב בתצורת התוסף: נתיב ברשומת השוק של התוסף, ב-plugin.json שלו, או בקובץ תצורה כגון .mcp.json או hooks/hooks.json
  • קישור סמלי: קישור שאוחסן במאגר
  • טקסט בקבצי התוסף: נתיב של תת-מודול, כגון vendor/tool, שנכתב בקובץ תצורה או בקובץ תחת ספריית רכיב

כשאף אחד מהם לא עושה זאת, Claude Code לא מביא שום תת-מודול עבור התוסף הזה. מאגר שהוא גם פרויקט וגם תוסף מחזיק לעתים קרובות תת-מודולים שרק הבנייה של הפרויקט משתמשת בהם, והכלל הזה משאיר אותם בחוץ.

Claude Code גם מביא כל תת-מודול במקום שבו הוא לא יכול לדעת אילו מהם מכילים קבצי תוסף, כגון:

  • SKILL.md בשורש: כל המאגר הוא אז ספרייה של skill אחד
  • קובץ ש-Claude Code לא יכול לקרוא: קובץ השוק, אחד מקובצי התצורה של התוסף, או .gitmodules

אם מוסיפים שוק עם --sparse, או שהמקור שלו מגדיר sparsePaths, Claude Code עושה checkout רק לספריות ששמותיהן שם ולא מביא שום תת-מודול. גרסאות קודמות עושות אותו דבר.

כדי להשאיר מחוץ לשכפול תת-מודול שהתוספים שלכם לא משתמשים בו, ראו השארת תת-מודולים שלא בשימוש מחוץ לשכפול.

#שמות חשופים תחת pluginRoot

שם חשוף הוא שם ספרייה יחיד בלי /, כגון "formatter". כדי לכתוב שמות חשופים במקום נתיבי ./, הגדירו את metadata.pluginRoot לספרייה שתחתיה הם מתפרשים. עם "pluginRoot": "./plugins", "source": "formatter" מתפרש אל ./plugins/formatter. דורש Claude Code מגרסה v2.1.239 ואילך.

ל-metadata.pluginRoot יש המגבלות האלה:

  • הוא עצמו חייב להיות נתיב יחסי בתוך השוק.
  • אין לו השפעה על מקור שכבר מתחיל ב-./.
  • מקור שמכיל /, כגון team-a/formatter, אינו שם חשוף ועדיין צריך את הקידומת ./, גם כש-metadata.pluginRoot מוגדר.

#מקור תוסף מסוג github

repo מקבל owner/repo. ref ו-sha אופציונליים.

{
  "name": "formatter",
  "source": {
    "source": "github",
    "repo": "your-org/formatter",
    "ref": "v2.0.0",
    "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"
  }
}

#מקור תוסף מסוג url

url הוא כתובת git מלאה: https://, http://, file:// או git@. סיומת .git לא נדרשת, כך שכתובות URL של Azure DevOps ושל AWS CodeCommit עובדות כפי שהן כתובות. הסוג הזה לא מקבל קיצור owner/repo.

{
  "name": "formatter",
  "source": {
    "source": "url",
    "url": "https://gitlab.example.com/your-group/formatter.git",
    "ref": "main"
  }
}

#מקור תוסף מסוג git-subdir

url מקבל כתובת git מלאה או קיצור owner/repo של GitHub. path הוא תת-הספרייה שמחזיקה את התוסף, ו-Claude Code עושה checkout רק לתת-הספרייה הזאת. על כתובת URL של https או SSH, Claude Code מבקש מהשרת שכפול חלקי, כך שממארח שתומך בשכפולים חלקיים, תוסף ב-monorepo גדול מותקן בלי להוריד את שאר המאגר.

{
  "name": "formatter",
  "source": {
    "source": "git-subdir",
    "url": "https://github.com/your-org/monorepo.git",
    "path": "tools/formatter"
  }
}

#מקור תוסף מסוג npm

מקור npm מקבל את השדות האלה:

  • package: שם חבילה ב-registry כגון @your-org/formatter, שם עם גרסה מצורפת כגון @your-org/[email protected], או קישור https לקובץ ה-tarball של החבילה
  • version: גרסה, טווח semver, או dist-tag, בשימוש כש-package הוא שם חבילה בלי גרסה מצורפת. השמיטו אותו כדי להביא את latest
  • registry: כתובת URL של registry לחבילה שאינה ב-registry ברירת המחדל

Claude Code מביא את החבילה עם לקוח ה-npm שלכם. סקריפטי ההתקנה של החבילה, כגון preinstall או postinstall, אף פעם לא רצים, והתלויות שלה לא מותקנות במהלך ההבאה. אם לחבילה יש lockfile נתמך ליד package.json שלה, Claude Code מתקין את תלויות חבילות Node.js האלה בשלב נפרד, גם כן עם סקריפטים כבויים.

Claude Code בודק את ערך package לפני שהוא מביא משהו. ערך שנדחה מפיל את ההתקנה עם הודעה שמציינת את הערך ואת הסיבה. הערכים שנדחים כוללים:

  • כתובת git, תיקייה או נתיב file:, או כינוי npm:: השתמשו במקור github, url או git-subdir למאגר git, בנתיב יחסי לתיקייה בשוק, ובשם של החבילה עצמה לכינוי
  • קישור tarball ב-github.com, gist.github.com, gitlab.com, bitbucket.org או git.sr.ht: נדחה גם כשהקישור הוא הורדת GitHub release, אלא אם זה קישור ל-npm registry של GitLab תחת gitlab.com/api/v4/
  • קישור tarball על http: נדחה אלא אם הוא מצביע על npm registry ברירת המחדל של המשתמש שמתקין

כתובת ה-URL של registry חייבת להשתמש ב-https, אלא אם זה npm registry ברירת המחדל של המשתמש שמתקין. עם כל registry אחר על http, ההתקנה נכשלת לפני ש-npm יוצר איתו קשר.

{
  "name": "formatter",
  "source": {
    "source": "npm",
    "package": "@your-org/formatter",
    "version": "^2.0.0",
    "registry": "https://npm.example.com"
  }
}

#מקור תוסף מסוג archive

url חייב להשתמש ב-https:// ולא יכול להצביע על מארח loopback, link-local או cloud-metadata. לגודל, לזמן הקצוב, להפניות ולמגבלות החילוץ של ההורדה, ראו הישארות בתוך מגבלות ההורדה לקבצים מתארחים.

שורש התוסף יכול להיות בראש קובץ ה-zip או ספרייה אחת מתחתיו.

sha256 הוא ה-digest של הארכיון כ-64 תווי hex, באותיות גדולות או קטנות. כשמגדירים אותו, Claude Code דוחה הורדה שאינה תואמת.

{
  "name": "formatter",
  "source": {
    "source": "archive",
    "url": "https://artifacts.example.com/formatter-2.0.0.zip",
    "sha256": "6bfa50e3d2e00c052b46abe51fff89346ac803e45771f76dcf6df1ab74cca5e1"
  }
}

#מקור תוסף מסוג command

השתמשו במקור command כשכלי שמותקן על המחשב של המשתמש מפיק את ספריית התוסף, כגון IDE שמרנדר את התוסף שלו עבור שרשרת הכלים שהמשתמש בחר. Claude Code מריץ את הפקודה כשהמשתמש מתקין או מעדכן את התוסף, ושוב פעם אחת בכל סשן, כך שהמשתמשים מקבלים את הפלט שהשתנה של הכלי בלי להתקין מחדש.

מקור command מקבל את השדות האלה:

  • command: פקודת מעטפת שמדפיסה את הנתיב המוחלט של ספריית התוסף כשורה אחת ויוצאת עם קוד 0. Claude Code מציג למשתמשים את כל המחרוזת לבדיקה לפני שהיא רצה. כתבו אותה כ-ASCII להדפסה, לכל היותר 500 תווים, בלי רצף של ארבעה רווחים או יותר.
  • timeout: מספר שלם של שניות מ-1 עד 600. ברירת המחדל היא 60.
  • mode: copy, ברירת המחדל, או link. ראו מצב copy ומצב link.
{
  "name": "formatter",
  "source": {
    "source": "command",
    "command": "my-tool claude-plugin-path",
    "timeout": 120
  }
}

לאופן שבו משתמשים מאשרים את הפקודה, ראו התקנה מהמעטפת. למה שמשתמשים רואים אחרי שמשנים אותה, ראו שינוי הפקודה של מקור command. מנהלים מכבים מקורות command באמצעות disableCommandPluginSources.

#מה הפקודה חייבת לעשות

כתבו את הפקודה כך שתעמוד בדרישות האלה:

  • מעטפת וספריית עבודה: Claude Code מריץ את הפקודה דרך sh, או דרך cmd.exe ב-Windows, מספריית הבית של המשתמש. תנו נתיב מוחלט או פקודה על PATH.
  • פלט: הדפיסו בדיוק שורה אחת ב-stdout, הנתיב המוחלט של ספריית התוסף, וצאו עם קוד 0 בתוך timeout שניות.
  • תוכן הספרייה: הספרייה מחזיקה את התוסף המלא עד שהפקודה יוצאת. הנתיב יכול להיות שונה מהרצה אחת לבאה.

#פלט שמפיל את ההתקנה או את העדכון

ההתקנה או העדכון נכשלים כשהפקודה יוצאת עם קוד שאינו אפס, רצה יותר מ-timeout, או מדפיסה משהו שאינו נתיב מוחלט אחד. הם נכשלים גם כשהספרייה שהודפסה היא אחת מאלה:

  • אין תוכן תוסף: לספרייה שהודפסה אין תוכן תוסף ברמה העליונה שלה, כגון ספריית .claude-plugin/ או ספריית skills/, commands/, agents/ או hooks/.
  • הספרייה של הסשן עצמו: הספרייה שהודפסה היא זו שבה Claude Code הופעל, או אחת מההורים שלה.
  • נתיב רשת: ב-Windows, הנתיב שהודפס הוא נתיב UNC.
  • גדול מדי להעתקה: במצב copy, הספרייה גדולה מ-256 MiB או שיש בה יותר מ-20,000 רשומות.

mode קובע אם Claude Code מעתיק את הספרייה שהודפסה או משתמש בה במקומה:

  • copy: Claude Code מעתיק את הספרייה למטמון התוספים וגוזר את גרסת התוסף מגיבוב של הקבצים שהועתקו. הכלי שלכם יכול למחוק או לכתוב מחדש את הספרייה אחרי שהפקודה יוצאת. הרצה חוזרת שמפיקה קבצים זהים נחשבת מעודכנת.
  • link: Claude Code ממלא את רשומת המטמון של התוסף בקישור לכל פריט ברמה העליונה של הספרייה שהודפסה, וטוען את הקבצים במקומם. דבר לא מועתק, תוכן הקבצים לא עובר גיבוב, ומגבלות הגודל לא חלות. השתמשו בזה לספרייה גדולה מדי להעתקה, כגון ייצוא SDK שרונדר.

לתוסף במצב link יש הדרישות האלה:

  • השאירו את הספרייה במקומה: Claude Code טוען את התוסף דרך הקישורים בכל הפעלה, ולכן הספרייה שהודפסה חייבת להישאר במקומה כל עוד התוסף נשאר מותקן.
  • הדפיסו נתיב אחר כדי לסמן תוכן חדש: הגרסה מגיעה מהנתיב האמיתי של הספרייה שהודפסה ומהפריטים ברמה העליונה שלה, לא מהקבצים שבתוכם.
  • השאירו קישורים סמליים ברמה העליונה בתוך הספרייה: ההתקנה נכשלת אם פריט ברמה העליונה הוא symlink שמצביע אל מחוץ לספרייה שהודפסה.
  • כללו את node_modules: Claude Code מדלג על התקנת תלויות חבילות Node.js לתוסף במצב link, לכן הדפיסו ספרייה שכבר מכילה את החבילות שהתוסף צריך.
  • סשנים שהופעלו בתוך הספרייה: סשן שהופעל בספרייה שהודפסה או בכל מקום מתחתיה לא טוען את התוסף.
  • לא ב-Windows: Claude Code מסרב להתקין תוסף במצב link ב-Windows. הכריזו שם "mode": "copy".

#מקורות של marketplace

מקור של marketplace אומר מאיפה Claude Code מביא קובץ marketplace.json. ה-CLI בונה אחד בשבילך כשאתה מוסיף marketplace, ואתה כותב אחד בעצמך בהגדרות:

שמות הסוגים url, git ו-github אומרים משהו אחר במקור של marketplace מאשר ב-מקור של תוסף:

שם הסוגכמקור של marketplaceכמקור של תוסף
urlקישור ישיר לקובץ marketplace.json, עם השדות url, headers ו-headersHelperמאגר git לשכפול, עם השדות url, ref ו-sha
gitמאגר git לשכפול, עם השדות url, ref, path ו-sparsePathsלא קיים
githubמאגר GitHub, עם השדות repo, ref, path ו-sparsePathsמאגר GitHub, עם השדות repo, ref ו-sha, ובלי path

הטבלה מפרטת כל סוג מקור של marketplace עם השדות שלו, הקלט של claude plugin marketplace add שמייצר אותו, ומה הוא עושה בכל אחד משלושת מפתחות ההגדרות.

סוגשדותקלט של marketplace addextraKnownMarketplacesstrictKnownMarketplacesblockedMarketplaces
urlurl, headers, headersHelperכתובת http:// או https:// שלא תואמת צורת gitטועןמתיר את אותה כתובת URLחוסם את אותה כתובת URL
githubrepo, ref, path, sparsePathsowner/repo, owner/repo@ref, או owner/repo#refטועןמתיר את אותם repo, ref ו-path. repo יכול להיות owner/*חוסם את אותו דבר, וכתובת git לאותו מאגר
giturl, ref, path, sparsePathsכתובת user@host:path, או כתובת http:// או https:// שמסתיימת ב-.git, מכילה /_git/, או מציינת מאגר של github.com או gitlab.com. #ref מצמיד refטועןמתיר את אותם URL, ref ו-pathחוסם את אותו דבר, ואיותים אחרים של אותו מאגר github.com
npmpackageלא מיוצרנכשל בטעינה: NPM marketplace sources not yet implementedמנתח אבל לא מתאים לכלום, כי שום דבר לא רושם marketplace מסוג npmמנתח אבל לא מתאים לכלום
filepathנתיב לקובץ .jsonטועןמתיר את אותו נתיבחוסם את אותו נתיב
directorypathנתיב לתיקייהטועןמתיר את אותו נתיבחוסם את אותו נתיב
settingsname, plugins, ownerלא מיוצרטועןמתיר רשומה עם אותו name ו-plugins זהיםחוסם את אותו name
skills-dirnoneלא מיוצרנכשל בטעינה: Unsupported marketplace source typeמתיר תוספי תיקיית skills. ראה ערכי מקור תקפים רק ברשימות מדיניותעוצר טעינה של תוספי תיקיית skills
hostPatternhostPatternלא מיוצרנכשל בטעינה: Unsupported marketplace source typeמתיר מקורות github, git ו-url שהמארח שלהם תואםחוסם את המקורות האלה
pathPatternpathPatternלא מיוצרנכשל בטעינה: Unsupported marketplace source typeמתיר מקורות file ו-directory שה-path שלהם תואםחוסם את המקורות האלה

#שדות לפי סוג

הטבלה מפרטת כל שדה של מקור marketplace שיש לו ברירת מחדל, אילוץ, או משמעות ייחודית לסוג שלו.

שדהסוגיםתיאור
urlurlקישור לקובץ marketplace.json. Claude Code מוריד רק את הקובץ הזה, ולכן התוספים של ה-marketplace לא יכולים להשתמש ב-מקורות של נתיב יחסי. ראה הישאר בתוך מגבלות ההורדה לקבצים מתארחים למגבלות הגודל, הזמן הקצוב וההפניות
urlgitמאגר ה-git לשכפול
headersurlמפה של כותרות HTTP ש-Claude Code שולח עם השליפה, למארחים מאומתים
headersHelperurlפקודה שמדפיסה כותרות שהערכים שלהן קצרי חיים מדי מכדי לרשום אותם ב-headers. דורש Claude Code v2.1.238 או חדש יותר. ראה אימות הורדות ארכיון
repogithubב-marketplace add וב-extraKnownMarketplaces, repo חייב לציין מאגר אחד. marketplace add דוחה owner/* כי זה לא קיצור owner/repo תקף. ב-extraKnownMarketplaces Claude Code לוקח את זה מילולית והשכפול נכשל
refgithub, gitענף או תג. ברירת המחדל היא ענף ברירת המחדל של המאגר
pathgithub, gitהנתיב של קובץ ה-marketplace בתוך המאגר. ברירת המחדל היא .claude-plugin/marketplace.json
pathfileקובץ ה-marketplace עצמו. Claude Code קורא אותו במקום ולוקח את התיקייה שתי רמות למעלה כשורש ה-marketplace, אז שמור את הקובץ ב-<root>/.claude-plugin/marketplace.json
pathdirectoryשורש ה-marketplace, התיקייה שמכילה את .claude-plugin/marketplace.json
sparsePathsgithub, gitמערך של תיקיות ל-sparse checkout, למשל [".claude-plugin", "plugins"]. claude plugin marketplace add --sparse מגדיר אותו
skipLfsgithub, gitמתקבל ואין לו השפעה. ראה השאר קבצי תוספים מחוץ ל-Git LFS
namesettingsחייב להיות שווה למפתח של extraKnownMarketplaces ולא יכול להיות שם שמור
pluginssettingsהקטלוג המוטמע, בלי קובץ מתארח. כל פריט מקבל name, source, description, version, strict, headers ו-headersHelper. כתוב את source של כל פריט כסוג אובייקט, כי לנתיב יחסי אין מאגר שאפשר לפתור מולו

#ערכי מקור תקפים רק ברשימות מדיניות

hostPattern, pathPattern, skills-dir, והצורה owner/* של repo תקפים רק בשתי רשימות המדיניות, strictKnownMarketplaces ו-blockedMarketplaces:

  • hostPattern ו-pathPattern: ביטויים רגולריים ש-Claude Code בודק מול מקור לפני שהוא שולף ממנו.
  • skills-dir: לא מקור. אם אתה מגדיר strictKnownMarketplaces בלי רשומה {"source": "skills-dir"}, תוספי תיקיית skills מפסיקים להיטען. אם אתה נועל סוג התאמה אישית כלשהו עם strictPluginOnlyCustomization, הם מפסיקים להיטען בין אם הרשומה קיימת ובין אם לא.
  • owner/*: כערך repo של github, מתאים לכל מאגר תחת בדיוק בעל ה-GitHub הזה. דורש Claude Code v2.1.223 או חדש יותר.

לסדר ההתאמה, למשמעות של ref מדויק, ולמתכונים, ראה ניהול תוספים לארגון שלך.

#אובייקטי מקור בהגדרות

ערך של extraKnownMarketplaces הוא מפה משם marketplace לאובייקט עם source. הרשומה הזו רושמת marketplace ממאגר git בענף main שלו:

{
  "extraKnownMarketplaces": {
    "your-marketplace": {
      "source": {
        "source": "git",
        "url": "https://git.example.com/your-org/your-marketplace.git",
        "ref": "main"
      }
    }
  }
}

strictKnownMarketplaces ו-blockedMarketplaces הם מערכים של אובייקטי מקור. רשימת ההיתר הזו מכניסה בעל GitHub אחד ומארח פנימי אחד:

{
  "strictKnownMarketplaces": [
    { "source": "github", "repo": "your-org/*" },
    { "source": "hostPattern", "hostPattern": "^git\\.example\\.com$" }
  ]
}

#הודעות אימות

claude plugin validate <path> מקבל את שורש ה-marketplace או את קובץ ה-marketplace עצמו. הוא מדפיס שגיאות ואזהרות. לקודי יציאה ול---strict, ראה plugin validate.

הודעה מציינת רשומת תוסף לפי האינדקס שלה, שנכתב כ-plugins.1.source או plugins[1].source.

הודעה עם קידומת של אינדקס רשומה ו-plugin.json →, כמו plugins[2] plugin.json →, עוסקת בקבצים של התוסף עצמו. claude plugin validate מדווח על שגיאות מפרט את ההודעות האלה עם התיקונים שלהן.

אזהרות שמזכירות שמות דגלים של Claude Desktop ש-Claude Desktop דוחה.

הטבלה ממפה הודעות ברמת marketplace לשדה שכל אחת עוסקת בו.

הודעהרמהשדה
Marketplace must have a nameErrorname ריק
Marketplace name cannot contain spaces. Use kebab-case (e.g., "my-marketplace")Errorname
Marketplace name cannot contain path separators (/ or \), ".." sequences, or be "."Errorname
Marketplace name impersonates an official Anthropic/Claude marketplaceErrorname. ראה שמות שמורים
Marketplace name cannot contain control or bidirectional-formatting charactersErrorname מכיל תו בקרה, כמו escape או שורה חדשה, או תו עיצוב דו-כיווני של Unicode
Marketplace name "inline" is reserved for --plugin-dir session plugins, והגרסאות builtin, skills-dir, synced, claude-plugin-test, npm, pip, uv, cargo, github ו-ghErrorname
Author name cannot be emptyErrorowner.name
Plugin name cannot contain spaces. Use kebab-case (e.g., "my-plugin")Errorplugins[i].name
Plugin name cannot contain control or bidirectional-formatting charactersErrorplugins[i].name
Plugin name "x" is reserved: it passes as one of Anthropic's ownErrorplugins[i].name. ראה את name במניפסט לשמות השמורים
Plugin name "x" reads as one of Anthropic's ownWarningplugins[i].name
Claude Code cannot install plugins from marketplace "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change the marketplace's "name".Errorname
Claude Code cannot install plugin "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change this entry's "name".Errorplugins[i].name
Duplicate plugin name "x" found in marketplaceErrorשתי רשומות חולקות name
plugins.i.source: Invalid inputErrorה-source של הרשומה לא תואם לאף סוג. ראה קלט לא תקף במקור
plugins.i.source: Invalid string: must start with "./"Errorsource של נתיב יחסי בלי ./ המוביל. לפני v2.1.285, הטעות הזו הדפיסה Invalid input במקום
plugins[i].source: Path contains "..": <path>Errorsource יחסי שיוצא משורש ה-marketplace
source.source: 'unsupported' is a parse-time placeholder and cannot be authoredErrorplugins[i].source
Plugin "x" sets headersHelper but is not "strict": falseErrorplugins[i].headersHelper, ברשומת archive
chain does not resolve (<reason>) , target must be a name in plugins[], a key in renames, or nullErrorrenames.<old>
target "x" is not a valid plugin name (PluginIdSchema)Errorrenames.<old>
Unknown field 'x'. Claude Code ignores it at load time.Warningהמפתח שצוין ברמה העליונה, תחת metadata, ברשומה, או תחת relevance של רשומה
Marketplace has no plugins definedWarningplugins ריק
Plugin "x" sets headers/headersHelper, which only apply to "archive" sources; they have no effect on this entry.Warningplugins[i].headers או plugins[i].headersHelper, ברשומה שה-source שלה אינו archive
Plugin "x" fetches its archive with a headersHelper but sets no sha256 pinWarningplugins[i].source.sha256
Header "x" is a request-routing/identity header that catalog entries may not set; Claude Code drops it at download time.Warningplugins[i].headers.<name>
Local source "x" is or traverses a symlink, so <path> was not readWarningplugins[i].source
No marketplace description provided. Adding a description helps users understand what this marketplace offersWarningdescription
Entry declares version "x" but <path>/plugin.json says "y". At install time, plugin.json winsWarningplugins[i].version, ברשומת נתיב יחסי
'relevance' must be an object containing topic and signals; got <type>. It will be ignored at load time.Warningplugins[i].relevance
'metadata' must be a free-form object; got <type>. It will be ignored at load time.Warningplugins[i].metadata
'experimental' must be an object containing component declarations; got <type>. It will be ignored at load time.Warningplugins[i].experimental
Marketplace name "x" is reserved in Claude DesktopWarningname הוא org, org-provisioned, או unknown. Claude Desktop דוחה את ה-marketplace
Marketplace name "x" is not accepted by Claude Desktop (letters, digits, ".", "_", "-"; must start alphanumeric; max 128 chars)Warningname. Claude Desktop דוחה את ה-marketplace
Plugin name "x" is not accepted by Claude Desktop (letters, digits, ".", "_", "-"; must start alphanumeric; max 128 chars)Warningplugins[i].name. Claude Desktop משמיט את הרשומה

#קלט לא תקף במקור

Invalid input על source אומר שהאובייקט לא תאם לאף סוג מקור. בדוק את הסיבות האלה:

  • package של npm שמכיל ..
  • סוג source שאינו אחד מ-מקורות התוסף
  • סוג ידוע עם שדה נדרש חסר או מסוג שגוי, כמו github בלי repo

נתיב יחסי שלא מתחיל ב-./, חוץ מ-"." או שם חשוף תחת metadata.pluginRoot, נכשל עם Invalid string: must start with "./". לפני v2.1.285, הוא הדפיס Invalid input כמו הסיבות למעלה.

#כשלים שהאימות לא תופס

claude plugin validate לא מדווח על כל כשל. רשומת hooks שנכתבת כנתיב קובץ או כמערך עוברת אימות, והשגיאה מופיעה רק כשהתוסף נטען, כמו שמתאר Hooks ברשומה. שגיאות בשליפת source מופיעות גם הן רק אחרי התקנה, לא באימות.

claude plugin list מציג תוסף שנכשל בטעינה עם השגיאה שלו, ו-פתרון בעיות בתוספים מכסה את המחרוזות של זמן הטעינה.

#הצעדים הבאים