תיעוד 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 ו-אירוח ותחזוקה של marketplace
- מתכונים לרשימת היתר ולרשימת חסימה: ראו ניהול תוספים לארגון
מצאו את הסעיף לפי מה שאתם כותבים או קוראים:
- קובץ ה-marketplace: שדות ברמה העליונה ו-רשומות תוספים
- ה-
sourceשל רשומה: מקורות תוסף - אובייקט
sourceבהגדרות: מקורות marketplace - פלט מ-
claude plugin validate <path>: הודעות אימות, שממפה כל הודעה לשדה שהיא מציינת
#קובץ ה-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 הם שדות חובה.
| שדה | סוג | תיאור |
|---|---|---|
name | string | מזהה ה-marketplace: אותיות, ספרות, ., _, ו--, שמתחיל באות או בספרה, ובלי ... claude plugin validate נכשל על כל שם אחר, כי Claude Code לא יכול להתקין תוספים מ-marketplace שמשתמש בשם כזה. המשתמשים מקלידים את השם אחרי @ ב-מזהה תוסף כמו my-plugin@my-marketplace כשהם מתקינים תוסף. ראו שמות שמורים |
owner | object | פרטי המתחזק. name הוא שדה חובה. email ו-url הם אופציונליים |
plugins | array | רשומות תוספים. כל רשומה מאומתת בפני עצמה, ולכן רשומה לא תקינה אחת לא מפילה את ה-marketplace |
$schema | string | כתובת JSON Schema להשלמה אוטומטית בעורך. מתעלמים ממנה בזמן הטעינה |
description | string | תיאור ה-marketplace שמוצג למשתמשים. claude plugin validate מזהיר כשהוא חסר |
version | string | גרסת מניפסט ה-marketplace |
metadata.description, metadata.version | string | מיקום חלופי ל-description ול-version |
metadata.pluginRoot | string | תיקייה שתחתיה נפתחים שמות מקור תוסף חשופים. ראו מקור תוסף בנתיב יחסי. דורש Claude Code v2.1.239 או גרסה מאוחרת יותר |
forceRemoveDeletedPlugins | boolean | כשהערך הוא true, תוסף שמסירים מ-plugins מוסר מההתקנה במחשבים של המשתמשים. ראו אירוח ותחזוקה של marketplace |
allowCrossMarketplaceDependenciesOn | array of strings | שמות marketplace שהתוספים שלהם מותרים להתקנה כתלויות של התוספים של ה-marketplace הזה. כשמתקינים תוסף, רק הרשימה ב-marketplace של התוסף עצמו חלה, על כל שרשרת התלויות שלו. ראו תלויות תוספים |
renames | object | מיפוי מ-name קודם של תוסף לשם הנוכחי שלו, או ל-null לתוסף שהוסר. ראו אירוח ותחזוקה של marketplace |
#רשומות תוספים
כל אובייקט במערך plugins ברמה העליונה של marketplace.json נותן שם לתוסף ואומר מאיפה להביא אותו. name ו-source הם שדות חובה.
מלבד שדות רישום התיקייה, רשומה מקבלת גם כל שדה של plugin.json, כמו description, version, author, commands, ו-hooks. מתי השדות האלה חלים, ראו איך רשומה משתלבת עם plugin.json.
הטבלה מפרטת את השדות של הרשומה עצמה ואת שדות המניפסט שהמשמעות שלהם משתנה ברשומה.
| שדה | סוג | תיאור |
|---|---|---|
name | string | מזהה התוסף: אותיות, ספרות, ., _, ו--, שמתחיל באות או בספרה. claude plugin validate נכשל על שמות אחרים, ש-Claude Code לא יכול להתקין. המשתמשים מקלידים אותו לפני @ כשהם מתקינים, גם כש-plugin.json של התוסף עצמו מגדיר name אחר |
source | string או object | מאיפה להביא את התוסף. ראו מקורות תוסף |
description | string | מוצג ברשימות ובפרטים של /plugin |
version | string | מחרוזת גרסה לתוסף. כש-plugin.json גם מגדיר version, plugin.json גובר ו-claude plugin validate מזהיר. ראו הפניה לטעינת תוספים |
category | string | קטגוריה חופשית לארגון הקטלוג |
tags | array of strings | תגיות חופשיות לחיפוש |
strict | boolean | ברירת המחדל true. האם plugin.json הוא המקור הקובע לרכיבי התוסף. ראו מצב strict |
relevance | object | אותות שאומרים ל-Claude Code מתי להציע את התוסף. ראו המלצה על תוספים לארגון |
dependencies | array | תוספים שחייבים להיות מופעלים כדי שהתוסף הזה יעבוד. כל פריט הוא "name", "name@marketplace", או אובייקט. ראו תלויות תוספים |
defaultEnabled | boolean | ברירת המחדל true. האם התוסף מתחיל כמופעל כשהמשתמש לא הגדיר אותו ב-enabledPlugins. ערך הרשומה גובר על plugin.json |
displayName | string | שם קריא שמוצג בממשק. כשגם הרשומה וגם plugin.json של התוסף לא מגדירים אחד, המשתמשים רואים את ה-name של התוסף |
metadata | object | אובייקט חופשי לשדות משלכם. Claude Code לא קורא אותו. דורש Claude Code v2.1.222 או גרסה מאוחרת יותר |
headers | object | כותרות HTTP ש-Claude Code שולח כשהוא מוריד את ה-archive של הרשומה הזו. כותרת שמוגדרת כאן מחליפה כותרת באותו שם מ-headers של מקור ה-marketplace. דורש Claude Code v2.1.238 או גרסה מאוחרת יותר |
headersHelper | string | פקודה שמדפיסה את כותרות הורדת ה-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, ושדות הרכיבים של הרשומה.
strict | plugin.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. "." לבדו פירושו השורש עצמו |
github | repo, ref, sha | מאגר GitHub בצורה owner/repo |
url | url, ref, sha | כל מאגר git לפי כתובת URL |
git-subdir | url, path, ref, sha | תת-ספרייה אחת של מאגר git, שמביאים עם sparse checkout |
npm | package, version, registry | חבילת npm registry או קישור tarball, שמביאים עם לקוח ה-npm ופורקים בלי להריץ סקריפטי התקנה |
archive | url, sha256 | ארכיון Zip על HTTPS. דורש Claude Code מגרסה v2.1.224 ואילך |
command | command, 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הוא שם חבילה בלי גרסה מצורפת. השמיטו אותו כדי להביא אתlatestregistry: כתובת 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 רשומות.
#מצב copy ומצב link
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, ואתה כותב אחד בעצמך בהגדרות:
claude plugin marketplace add: Claude Code בונה את המקור מהמחרוזת שאתה מעביר.extraKnownMarketplaces: אתה כותב את המקור בעצמך כאובייקטsource.strictKnownMarketplacesו-blockedMarketplaces: מנהלים כותבים מקורות בשתי רשימות המדיניות האלה.strictKnownMarketplacesהיא רשימת ההיתר ו-blockedMarketplacesהיא רשימת החסימה.
שמות הסוגים 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 add | extraKnownMarketplaces | strictKnownMarketplaces | blockedMarketplaces |
|---|---|---|---|---|---|
url | url, headers, headersHelper | כתובת http:// או https:// שלא תואמת צורת git | טוען | מתיר את אותה כתובת URL | חוסם את אותה כתובת URL |
github | repo, ref, path, sparsePaths | owner/repo, owner/repo@ref, או owner/repo#ref | טוען | מתיר את אותם repo, ref ו-path. repo יכול להיות owner/* | חוסם את אותו דבר, וכתובת git לאותו מאגר |
git | url, ref, path, sparsePaths | כתובת user@host:path, או כתובת http:// או https:// שמסתיימת ב-.git, מכילה /_git/, או מציינת מאגר של github.com או gitlab.com. #ref מצמיד ref | טוען | מתיר את אותם URL, ref ו-path | חוסם את אותו דבר, ואיותים אחרים של אותו מאגר github.com |
npm | package | לא מיוצר | נכשל בטעינה: NPM marketplace sources not yet implemented | מנתח אבל לא מתאים לכלום, כי שום דבר לא רושם marketplace מסוג npm | מנתח אבל לא מתאים לכלום |
file | path | נתיב לקובץ .json | טוען | מתיר את אותו נתיב | חוסם את אותו נתיב |
directory | path | נתיב לתיקייה | טוען | מתיר את אותו נתיב | חוסם את אותו נתיב |
settings | name, plugins, owner | לא מיוצר | טוען | מתיר רשומה עם אותו name ו-plugins זהים | חוסם את אותו name |
skills-dir | none | לא מיוצר | נכשל בטעינה: Unsupported marketplace source type | מתיר תוספי תיקיית skills. ראה ערכי מקור תקפים רק ברשימות מדיניות | עוצר טעינה של תוספי תיקיית skills |
hostPattern | hostPattern | לא מיוצר | נכשל בטעינה: Unsupported marketplace source type | מתיר מקורות github, git ו-url שהמארח שלהם תואם | חוסם את המקורות האלה |
pathPattern | pathPattern | לא מיוצר | נכשל בטעינה: Unsupported marketplace source type | מתיר מקורות file ו-directory שה-path שלהם תואם | חוסם את המקורות האלה |
#שדות לפי סוג
הטבלה מפרטת כל שדה של מקור marketplace שיש לו ברירת מחדל, אילוץ, או משמעות ייחודית לסוג שלו.
| שדה | סוגים | תיאור |
|---|---|---|
url | url | קישור לקובץ marketplace.json. Claude Code מוריד רק את הקובץ הזה, ולכן התוספים של ה-marketplace לא יכולים להשתמש ב-מקורות של נתיב יחסי. ראה הישאר בתוך מגבלות ההורדה לקבצים מתארחים למגבלות הגודל, הזמן הקצוב וההפניות |
url | git | מאגר ה-git לשכפול |
headers | url | מפה של כותרות HTTP ש-Claude Code שולח עם השליפה, למארחים מאומתים |
headersHelper | url | פקודה שמדפיסה כותרות שהערכים שלהן קצרי חיים מדי מכדי לרשום אותם ב-headers. דורש Claude Code v2.1.238 או חדש יותר. ראה אימות הורדות ארכיון |
repo | github | ב-marketplace add וב-extraKnownMarketplaces, repo חייב לציין מאגר אחד. marketplace add דוחה owner/* כי זה לא קיצור owner/repo תקף. ב-extraKnownMarketplaces Claude Code לוקח את זה מילולית והשכפול נכשל |
ref | github, git | ענף או תג. ברירת המחדל היא ענף ברירת המחדל של המאגר |
path | github, git | הנתיב של קובץ ה-marketplace בתוך המאגר. ברירת המחדל היא .claude-plugin/marketplace.json |
path | file | קובץ ה-marketplace עצמו. Claude Code קורא אותו במקום ולוקח את התיקייה שתי רמות למעלה כשורש ה-marketplace, אז שמור את הקובץ ב-<root>/.claude-plugin/marketplace.json |
path | directory | שורש ה-marketplace, התיקייה שמכילה את .claude-plugin/marketplace.json |
sparsePaths | github, git | מערך של תיקיות ל-sparse checkout, למשל [".claude-plugin", "plugins"]. claude plugin marketplace add --sparse מגדיר אותו |
skipLfs | github, git | מתקבל ואין לו השפעה. ראה השאר קבצי תוספים מחוץ ל-Git LFS |
name | settings | חייב להיות שווה למפתח של extraKnownMarketplaces ולא יכול להיות שם שמור |
plugins | settings | הקטלוג המוטמע, בלי קובץ מתארח. כל פריט מקבל 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 name | Error | name ריק |
Marketplace name cannot contain spaces. Use kebab-case (e.g., "my-marketplace") | Error | name |
Marketplace name cannot contain path separators (/ or \), ".." sequences, or be "." | Error | name |
Marketplace name impersonates an official Anthropic/Claude marketplace | Error | name. ראה שמות שמורים |
Marketplace name cannot contain control or bidirectional-formatting characters | Error | name מכיל תו בקרה, כמו escape או שורה חדשה, או תו עיצוב דו-כיווני של Unicode |
Marketplace name "inline" is reserved for --plugin-dir session plugins, והגרסאות builtin, skills-dir, synced, claude-plugin-test, npm, pip, uv, cargo, github ו-gh | Error | name |
Author name cannot be empty | Error | owner.name |
Plugin name cannot contain spaces. Use kebab-case (e.g., "my-plugin") | Error | plugins[i].name |
Plugin name cannot contain control or bidirectional-formatting characters | Error | plugins[i].name |
Plugin name "x" is reserved: it passes as one of Anthropic's own | Error | plugins[i].name. ראה את name במניפסט לשמות השמורים |
Plugin name "x" reads as one of Anthropic's own | Warning | plugins[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". | Error | name |
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". | Error | plugins[i].name |
Duplicate plugin name "x" found in marketplace | Error | שתי רשומות חולקות name |
plugins.i.source: Invalid input | Error | ה-source של הרשומה לא תואם לאף סוג. ראה קלט לא תקף במקור |
plugins.i.source: Invalid string: must start with "./" | Error | source של נתיב יחסי בלי ./ המוביל. לפני v2.1.285, הטעות הזו הדפיסה Invalid input במקום |
plugins[i].source: Path contains "..": <path> | Error | source יחסי שיוצא משורש ה-marketplace |
source.source: 'unsupported' is a parse-time placeholder and cannot be authored | Error | plugins[i].source |
Plugin "x" sets headersHelper but is not "strict": false | Error | plugins[i].headersHelper, ברשומת archive |
chain does not resolve (<reason>) , target must be a name in plugins[], a key in renames, or null | Error | renames.<old> |
target "x" is not a valid plugin name (PluginIdSchema) | Error | renames.<old> |
Unknown field 'x'. Claude Code ignores it at load time. | Warning | המפתח שצוין ברמה העליונה, תחת metadata, ברשומה, או תחת relevance של רשומה |
Marketplace has no plugins defined | Warning | plugins ריק |
Plugin "x" sets headers/headersHelper, which only apply to "archive" sources; they have no effect on this entry. | Warning | plugins[i].headers או plugins[i].headersHelper, ברשומה שה-source שלה אינו archive |
Plugin "x" fetches its archive with a headersHelper but sets no sha256 pin | Warning | plugins[i].source.sha256 |
Header "x" is a request-routing/identity header that catalog entries may not set; Claude Code drops it at download time. | Warning | plugins[i].headers.<name> |
Local source "x" is or traverses a symlink, so <path> was not read | Warning | plugins[i].source |
No marketplace description provided. Adding a description helps users understand what this marketplace offers | Warning | description |
Entry declares version "x" but <path>/plugin.json says "y". At install time, plugin.json wins | Warning | plugins[i].version, ברשומת נתיב יחסי |
'relevance' must be an object containing topic and signals; got <type>. It will be ignored at load time. | Warning | plugins[i].relevance |
'metadata' must be a free-form object; got <type>. It will be ignored at load time. | Warning | plugins[i].metadata |
'experimental' must be an object containing component declarations; got <type>. It will be ignored at load time. | Warning | plugins[i].experimental |
Marketplace name "x" is reserved in Claude Desktop | Warning | name הוא org, org-provisioned, או unknown. Claude Desktop דוחה את ה-marketplace |
Marketplace name "x" is not accepted by Claude Desktop (letters, digits, ".", "_", "-"; must start alphanumeric; max 128 chars) | Warning | name. Claude Desktop דוחה את ה-marketplace |
Plugin name "x" is not accepted by Claude Desktop (letters, digits, ".", "_", "-"; must start alphanumeric; max 128 chars) | Warning | plugins[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 מציג תוסף שנכשל בטעינה עם השגיאה שלו, ו-פתרון בעיות בתוספים מכסה את המחרוזות של זמן הטעינה.
#הצעדים הבאים
- יצירת marketplace: בנה marketplace מהשדות האלה והתקן ממנו באופן מקומי
- אירוח ותחזוקה של marketplace: איפה לשים את הקובץ ואיך משתמשים מקבלים שינויים
- הפניה למניפסט של תוסף: שדות
plugin.jsonשרשומה יכולה לדרוס - ניהול תוספים לארגון שלך: מתכונים של רשימת היתר ורשימת חסימה שמשתמשים בערכי המקור האלה