Przejdź do głównej zawartości

Budowa i dystrybucja pluginu lub prywatnego marketplace'u

Plugin agenta kodującego to katalog z manifestem (.claude-plugin/plugin.json, .codex-plugin/plugin.json albo .cursor-plugin/plugin.json), skillami, hookami i konfiguracją MCP, dystrybuowany przez marketplace, czyli repozytorium git z plikiem katalogu. Skille i serwery MCP przenoszą się między Claude Code, Codex i Cursorem; hooki nie, więc każde narzędzie potrzebuje własnego pliku hooków i własnego testu.

Twój zespół ma skill do migracji w jednym repozytorium, hook PreToolUse w czyimś ~/.claude/settings.json i serwer MCP do bazy stagingowej, który trzy osoby skonfigurowały na trzy sposoby. Nowa osoba w zespole nie dostaje niczego z tego, a poprawka hooka nie trafia do nikogo. Ta strona jest dla programisty, który raz pakuje ten zestaw, i dla tech leada, który jest właścicielem prywatnego marketplace’u, z którego zestaw jest wydawany.

Co zyskujesz, pakując konfigurację agentów zespołu w plugin

Dział zatytułowany „Co zyskujesz, pakując konfigurację agentów zespołu w plugin”
  • Działający plugin acme-db-guard, który łączy skill, blokujący hook i serwer MCP tylko do odczytu, z każdym plikiem pokazanym w całości
  • Procedurę weryfikacji, która dowodzi działania pluginu, zanim ktokolwiek go zainstaluje: validate --strict, test hooka, claude plugin eval na tle przebiegu bez pluginu i odczyt kosztu w kontekście
  • Prywatny marketplace, z którego instalują zarówno Claude Code, jak i Codex, oraz ustawienia zarządzane, które przypinają go całemu zespołowi
  • Zasadę wersjonowania, zadanie CI, które ją egzekwuje, i tabelę tego, co przenosi się między narzędziami, a co nie

Kroki oznaczone poniżej jako uruchomione wykonaliśmy 2026-09-26 na Claude Code 2.1.283 (krok ze szkieletem sprawdzony ponownie na 2.1.286) i codex-cli 0.157.1 w tymczasowym katalogu domowym. Szczegóły Cursora pochodzą z oficjalnego repozytorium cursor/plugins; cursor.com był niedostępny, więc żadnego kroku w Cursorze nie uruchomiliśmy.

Buduj plugin tylko wtedy, gdy musisz wydać zależne od siebie elementy pod jedną wersją. Pojedyncza procedura to skill, pojedyncze połączenie to serwer MCP.

Twoja sytuacjaZbuduj
Jedna procedura wielokrotnego użytku, używana w kilku agentachSkill instalowany przez npx skills
Jedno połączenie na żywo z wewnętrznym APISerwer MCP dodawany per projekt
Procedura, która działa tylko z hookiem albo serwerem obokPlugin
Ten sam zestaw ma trafić na każdy laptop, a poprawka do wszystkichPlugin w marketplace zespołu
Zachowanie specyficzne dla dostawcy, np. bot do PR-ówŻadne z nich: skonfiguruj produkt dostawcy

Przegląd pluginów opisuje instalowanie cudzych pluginów. Ta strona opisuje budowę własnych.

Z czego składa się plugin w Claude Code, Codex i Cursorze?

Dział zatytułowany „Z czego składa się plugin w Claude Code, Codex i Cursorze?”

Foldery komponentów to ten sam pomysł we wszystkich trzech narzędziach. Różnią się położeniem manifestu i formatem hooków.

acme-plugins/ # repozytorium marketplace'u
├── .claude-plugin/marketplace.json # katalog dla Claude Code (Codex też go czyta)
├── .agents/plugins/marketplace.json # katalog dla Codeksa (opcjonalny)
└── plugins/acme-db-guard/
├── .claude-plugin/plugin.json # manifest Claude Code
├── .codex-plugin/plugin.json # manifest Codeksa (opcjonalny)
├── skills/new-migration/SKILL.md # format Agent Skills: przenośny
├── hooks/hooks.json # format hooków Claude Code: nieprzenośny
├── scripts/guard-applied-migrations.sh
└── .mcp.json # serwery MCP
ElementClaude CodeCodexCursor
Manifest.claude-plugin/plugin.json.codex-plugin/plugin.json.cursor-plugin/plugin.json
Plik marketplace’u.claude-plugin/marketplace.json.agents/plugins/marketplace.json albo plik Claude.cursor-plugin/marketplace.json
Skilleskills/<name>/SKILL.md, wykrywane automatycznieskills/; ścieżka "skills" w manifeście dokłada kolejne"skills": "./skills/" w manifeście
Hookihooks/hooks.json, wykrywane automatycznietworzone przez skill plugin-creator; formatu tu nie sprawdziliśmy"hooks": "./hooks/hooks.json", inny schemat
Serwery MCP.mcp.json"mcpServers": "./.mcp.json"mcp.json (według cursor/plugins)
Zmienna katalogu pluginu${CLAUDE_PLUGIN_ROOT}niesprawdzone${CURSOR_PLUGIN_ROOT} (według plików hooks.json w cursor/plugins)

Przykład pilnuje migracji bazy danych. Skill mówi agentowi, jak napisać nową migrację, hook blokuje edycję migracji śledzonych już przez git, a serwer MCP pozwala agentowi przeglądać staging bez prawa zapisu.

  1. Wygeneruj szkielet pluginu. Zacznij od generatora danego narzędzia, a potem podmień pliki zastępcze na te poniżej.

    Okno terminala
    claude plugin init acme-db-guard --with skills hooks mcp --description "Migration guard"

    Polecenie zapisuje plugin w ~/.claude/skills/acme-db-guard/, a w następnej sesji ładuje go jako acme-db-guard@skills-dir. Z --with skills hooks mcp zapisuje też pliki przykładowe: przed dodaniem plików poniżej usuń wygenerowany SKILL.md w katalogu głównym pluginu, skills/example/ i hooks-handlers/ (handler SessionStart), inaczej wydasz przykładowy skill i hook, których nie napisałeś (sprawdzone na 2.1.286). Gdy plugin zadziała, przenieś folder do repozytorium marketplace’u. Jeśli chcesz budowy z przewodnikiem, plugin-dev@claude-plugins-official dodaje skill /plugin-dev:create-plugin i subagenta walidującego; kosztuje około 2349 tokenów stale obecnych w kontekście, więc włączaj go tylko na czas tworzenia.

  2. Napisz manifest. Pole name staje się przestrzenią nazw każdego skilla i komendy, więc użytkownik wywołuje skill jako /acme-db-guard:new-migration. Nigdy nie zmieniaj nazwy opublikowanego pluginu.

    plugins/acme-db-guard/.claude-plugin/plugin.json
    {
    "name": "acme-db-guard",
    "version": "0.1.0",
    "description": "Migration skill, schema guard hook and read-only Postgres MCP",
    "author": { "name": "Acme Platform Team" }
    }
  3. Dodaj skill. Pole description decyduje, kiedy agent załaduje skill, więc wymień w nim frazy, które go wyzwalają.

    plugins/acme-db-guard/skills/new-migration/SKILL.md
    ---
    name: new-migration
    description: Use when the user asks to change the database schema, add a column, add an index or write a migration. Writes a new numbered file in db/migrations/ and never edits an applied one.
    ---
    # New migration
    1. List db/migrations/ and pick the next number.
    2. Write the forward migration only; create indexes with CREATE INDEX CONCURRENTLY in a migration of its own, because it cannot run inside a transaction.
    3. Run the migration against a scratch database and the test suite, and paste both results.
  4. Dodaj hook. Skill prosi, hook egzekwuje. Kod wyjścia 2 blokuje wywołanie narzędzia i odsyła agentowi komunikat ze stderr.

    plugins/acme-db-guard/hooks/hooks.json
    {
    "hooks": {
    "PreToolUse": [
    {
    "matcher": "Edit|Write",
    "hooks": [
    { "type": "command", "command": "\"${CLAUDE_PLUGIN_ROOT}/scripts/guard-applied-migrations.sh\"" }
    ]
    }
    ]
    }
    }
    plugins/acme-db-guard/scripts/guard-applied-migrations.sh
    #!/usr/bin/env bash
    command -v jq >/dev/null && command -v git >/dev/null || { echo "acme-db-guard: jq and git are required" >&2; exit 1; }
    path=$(jq -r '.tool_input.file_path // empty')
    case "$path" in
    */db/migrations/*)
    if git ls-files --error-unmatch "$path" >/dev/null 2>&1; then
    echo "Blocked: $path is already committed. Write a new migration instead." >&2
    exit 2
    fi ;;
    esac
    exit 0

    Przed commitem nadaj skryptowi prawo wykonania (chmod +x). Skrypt potrzebuje jq i git w PATH; plugin ich nie zainstaluje, dlatego pierwsza linia kończy skrypt kodem 1 z komunikatem, gdy brakuje któregoś z nich. Kod 1 ujawnia błąd, ale nie blokuje każdego wywołania narzędzia.

  5. Dodaj serwer MCP. Sekrety podawaj jako ${VARIABLE}, żeby żadne dane uwierzytelniające nie trafiły do repozytorium. Postgres MCP Pro to pakiet PyPI postgres-mcp uruchamiany przez uvx; pakiet npm o tej samej nazwie nie ma z nim nic wspólnego. Ostatnie wydanie w PyPI, 0.3.0, pochodzi z 2025-05-16, więc przypnij wersję (postgres-mcp==0.3.0) i zamień go na inny serwer bazodanowy, jeśli projekt pozostanie nieutrzymywany.

    plugins/acme-db-guard/.mcp.json
    {
    "mcpServers": {
    "staging-db": {
    "command": "uvx",
    "args": ["postgres-mcp==0.3.0", "--access-mode=restricted"],
    "env": { "DATABASE_URI": "${ACME_STAGING_DATABASE_URI}" }
    }
    }
    }
  6. Załaduj plugin na jedną sesję. claude --plugin-dir ./plugins/acme-db-guard ładuje plugin bez instalacji. Po zmianie /reload-plugins wczytuje ją bez restartu.

Udowodnij, że plugin działa, zanim ktokolwiek go zainstaluje

Dział zatytułowany „Udowodnij, że plugin działa, zanim ktokolwiek go zainstaluje”

Plugin działa na maszynie każdej osoby z zespołu, z jej danymi uwierzytelniającymi, więc „u mnie się załadował” nie jest dowodem. Wykonaj cztery sprawdzenia; razem zastępują czytanie pluginu linijka po linijce.

  1. Waliduj w trybie ścisłym. --strict zamienia ostrzeżenia w niezerowy kod wyjścia, więc łapie nierozpoznane pola i brakujące metadane, które środowisko uruchomieniowe toleruje.

    Okno terminala
    claude plugin validate --strict ./acme-plugins
    claude plugin validate --strict ./acme-plugins/plugins/acme-db-guard

    Waliduj osobno marketplace i każdy plugin. Walidacja marketplace’u nie wykrywa katalogu source, który nie istnieje; zawodzi dopiero instalacja.

  2. Przetestuj hook bez agenta. Podaj skryptowi JSON, który wysyła zdarzenie PreToolUse, i sprawdź kody wyjścia:

    Okno terminala
    echo '{"tool_input":{"file_path":"'"$PWD"'/db/migrations/001_init.sql"}}' \
    | plugins/acme-db-guard/scripts/guard-applied-migrations.sh; echo "exit=$?"
    # Blocked: …/db/migrations/001_init.sql is already committed. Write a new migration instead.
    # exit=2

    Nowy, nieśledzony plik musi zwrócić exit=0. Powyższe polecenie działa tylko w repozytorium, w którym db/migrations/001_init.sql jest zacommitowany, a job CI poniżej działa w repozytorium marketplace’u, gdzie takiego pliku nie ma. Dlatego własny skrypt testowy pluginu buduje tę konfigurację w tymczasowym repozytorium i sprawdza oba przypadki. Nadaj mu prawo wykonywania; job CI uruchamia go przy każdym pull requeście.

    plugins/acme-db-guard/tests/hook.sh
    #!/usr/bin/env bash
    set -u
    guard="$(cd "$(dirname "$0")/.." && pwd)/scripts/guard-applied-migrations.sh"
    tmp=$(mktemp -d); trap 'rm -rf "$tmp"' EXIT
    git -C "$tmp" init -q
    mkdir -p "$tmp/db/migrations"; echo x > "$tmp/db/migrations/001_init.sql"
    git -C "$tmp" add -A
    git -C "$tmp" -c user.name=t -c user.email=t@t commit -qm init
    cd "$tmp"
    check() { # $1 = file, $2 = expected exit code
    echo '{"tool_input":{"file_path":"'"$tmp/$1"'"}}' | "$guard" 2>/dev/null
    got=$?; [ "$got" -eq "$2" ] || { echo "FAIL $1: exit $got, want $2"; exit 1; }
    }
    check db/migrations/001_init.sql 2
    check db/migrations/002_add_index.sql 0
    echo "hook tests passed"

    Raz celowo zepsuj strażnika (zmień w nim exit 2 na exit 0) i sprawdź, że skrypt wypisuje FAIL i kończy się kodem 1; test, który nie może się nie powieść, niczego nie dowodzi.

  3. Zmierz koszt. Zainstaluj plugin z lokalnego marketplace’u i odczytaj spis komponentów:

    Okno terminala
    claude plugin marketplace add ./acme-plugins
    claude plugin install acme-db-guard@acme-plugins
    claude plugin details acme-db-guard
    Component inventory
    Skills (1) new-migration
    Hooks (1) PreToolUse (harness-only — no model context cost)
    MCP servers (1) staging-db (tool schemas resolved at runtime; not counted)
    Projected token cost
    Always-on: ~71 tok added to every session
    …

    Powyższy wynik jest skrócony; pełny wymienia też puste typy komponentów i tabelę dla każdego komponentu. Spodziewaj się około 70 tokenów (2.1.283); wynik różniący się o kilka tokenów na innej wersji jest normalny. Schematy narzędzi MCP nie wchodzą do tej liczby, więc sprawdź też /context w sesji z podłączonym serwerem.

  4. Oceń plugin na tle przebiegu bazowego. claude plugin eval uruchamia przypadki z katalogu evals/ pluginu z pluginem i bez niego, a potem raportuje różnicę. claude plugin eval init --bare new-migration-numbering tworzy evals/new-migration-numbering/prompt.md (zadanie, max_turns, allowed_tools) i graders/criteria.md (definicję sukcesu ocenianą przez model).

    Okno terminala
    claude plugin eval ./acme-plugins/plugins/acme-db-guard --runs 3 --threshold 0.8 --no-publish

    Polecenie kończy się kodem 1, gdy którykolwiek przypadek wypadnie poniżej progu. Eval uruchamia plugin na twojej maszynie, z twoimi uprawnieniami; --trust-plugin przekazuj tylko dla pluginów, które sam napisałeś.

    Eval ocenia skill. Przy domyślnym --mocks record nie uruchamia staging-db, dopóki nie nagrasz mocka albo nie przekażesz --allow-real-servers, a hook zadziała tylko wtedy, gdy przypadek może wywołać Edit lub Write (--allow-tools Edit Write). Dowodem działania hooka pozostaje test z JSON-em podanym na wejście w kroku 2 (sprawdzone na 2.1.283).

Kto zatwierdza: właściciel pluginu (osoba wskazana w CODEOWNERS dla plugins/acme-db-guard/) akceptuje wydanie tylko wtedy, gdy wszystkie cztery sprawdzenia przechodzą w pull requeście. Recenzenci czytają różnice z evali i koszt w kontekście, a nie każdą linijkę skilla.

Marketplace to plik katalogu w katalogu głównym repozytorium. Jego pole name użytkownicy wpisują po @, więc wybierz je raz.

.claude-plugin/marketplace.json
{
"name": "acme-plugins",
"description": "Acme platform team plugins",
"owner": { "name": "Acme Platform Team" },
"plugins": [
{
"name": "acme-db-guard",
"source": "./plugins/acme-db-guard",
"description": "Migration skill, schema guard hook and read-only Postgres MCP"
}
]
}

validate --strict nie przechodzi bez pola description na najwyższym poziomie. Wypchnij repozytorium do prywatnego repozytorium na GitHubie albo GitLabie. Osoby z zespołu instalują je potem w swoim narzędziu:

Okno terminala
claude plugin marketplace add acme/acme-plugins
claude plugin install acme-db-guard@acme-plugins

Claude Code klonuje repozytorium z danymi uwierzytelniającymi git zapisanymi na maszynie i nigdy o nie nie pyta. Dla HTTPS na GitHubie uruchom gh auth login, a potem gh auth setup-git; sam GITHUB_TOKEN w środowisku nic nie da bez pomocnika uwierzytelniania gita (credential helper). Ustaw CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1, żeby pominąć próbę przez SSH.

Żeby przypiąć plugin do jednego repozytorium, uruchom oba polecenia z --scope project. To zapisuje .claude/settings.json:

.claude/settings.json
{
"extraKnownMarketplaces": {
"acme-plugins": { "source": { "source": "github", "repo": "acme/acme-plugins" } }
},
"enabledPlugins": { "acme-db-guard@acme-plugins": true }
}

Dodaj ten plik do commita. Marketplace rejestruje się, gdy dana osoba zaufa folderowi, a plugin z zewnętrznym źródłem nadal wymaga jednego claude plugin install … --scope project na każdej maszynie.

Żeby ograniczyć marketplace’y, które zespół może dodać w Claude Code, do listy obejmującej wasz, administrator platformy ustawia ustawienia zarządzane (z serwera, przez MDM albo w managed-settings.json):

managed-settings.json
{
"strictKnownMarketplaces": [
{ "source": "github", "repo": "anthropics/claude-plugins-official" },
{ "source": "github", "repo": "acme/*" },
{ "source": "skills-dir" }
],
"extraKnownMarketplaces": {
"acme-plugins": { "source": { "source": "github", "repo": "acme/acme-plugins" }, "autoUpdate": true }
},
"enabledPlugins": { "acme-db-guard@acme-plugins": true }
}

Zostaw wpis { "source": "skills-dir" }: bez niego polityka blokuje też szkielety z claude plugin init, na których autorzy testują pluginy. Marketplace’y firm trzecich nie aktualizują się automatycznie, dopóki użytkownik albo administrator tego nie włączy, dlatego ustawiamy tu autoUpdate. Jedna polityka dla każdego agenta opisuje odpowiedniki w Codeksie i Cursorze. Jak prowadzić marketplace na co dzień (uwierzytelnianie prywatnego repozytorium, wdrożenie w zespole, wycofywanie pluginu), opisuje Prywatny marketplace pluginów dla zespołu.

Wersjonuj i wydawaj plugin tak, żeby poprawki docierały do wszystkich

Dział zatytułowany „Wersjonuj i wydawaj plugin tak, żeby poprawki docierały do wszystkich”

Wypchnięty commit nikogo nie aktualizuje, dopóki plugin.json ma starą wartość version. Wybierz jedną zasadę i zapisz ją w README marketplace’u:

  • Wersje semantyczne. Podbijaj version w plugin.json przy każdym wydaniu. Nie wpisuj wersji dodatkowo we wpisie marketplace’u; jedno źródło wyklucza rozbieżność.
  • Śledzenie commitów. Pomiń version wszędzie, a użytkownicy będą śledzić najnowszy commit.

Taguj każde wydanie, żeby osoba z zespołu mogła przypiąć wersję albo się wycofać:

Okno terminala
# po podbiciu "version" do 0.1.1 w plugin.json i commicie
claude plugin tag --dry-run ./plugins/acme-db-guard
# … Dry run — would create tag acme-db-guard--v0.1.1 at HEAD in …
claude plugin tag --push ./plugins/acme-db-guard

claude plugin tag sprawdza, czy plugin.json i wpis w marketplace są zgodne, zanim utworzy tag <name>--v<version>. Zespół pobiera wydanie tak:

Okno terminala
claude plugin marketplace update acme-plugins
claude plugin update acme-db-guard@acme-plugins
# Plugin "acme-db-guard" updated from 0.1.0 to 0.1.1 for scope user. Restart to apply changes.

Codex trzyma każdą zainstalowaną wersję we własnym katalogu cache (plugins/cache/acme-plugins/acme-db-guard/0.1.0/ na 0.157.1). Uruchom codex plugin marketplace upgrade acme-plugins, a potem ponownie codex plugin add acme-db-guard@acme-plugins. Podczas lokalnej pracy skill plugin-creator od OpenAI zmienia sufiks +codex.<token> w wersji, a nie sam numer wersji.

Egzekwuj zasadę w CI. To zadanie nie przechowuje żadnych sekretów i ich nie potrzebuje, bo walidacja nie wywołuje modelu:

.github/workflows/plugins.yml
name: plugin-marketplace
on:
pull_request:
paths: ['plugins/**', '.claude-plugin/**', '.agents/**']
permissions:
contents: read
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
persist-credentials: false
- uses: actions/setup-node@v7
with:
node-version: 22
- run: npm install -g @anthropic-ai/claude-code@2.1.283
- run: claude plugin validate --strict .
- run: for p in plugins/*/; do claude plugin validate --strict "$p" || exit 1; done
- run: for s in plugins/*/scripts/*.sh; do [ -e "$s" ] || continue; [ -x "$s" ] || { echo "$s not executable"; exit 1; }; done
- run: for t in plugins/*/tests/*.sh; do [ -e "$t" ] || continue; [ -x "$t" ] || { echo "$t not executable"; exit 1; }; "$t" || exit 1; done
- name: Claude and Codex manifests carry the same version
run: |
for p in plugins/*/; do
[ -f "$p/.codex-plugin/plugin.json" ] || continue
a=$(jq -r .version "$p/.claude-plugin/plugin.json")
b=$(jq -r .version "$p/.codex-plugin/plugin.json" | cut -d+ -f1)
[ "$a" = "$b" ] || { echo "$p: $a vs $b"; exit 1; }
done

Krok zgodności wersji to nasza propozycja: claude plugin tag sprawdza tylko pliki Claude, więc nic innego nie zauważy pozostawionego w tyle manifestu Codeksa. claude plugin eval uruchamiaj lokalnie albo w osobnym zadaniu na gałęzi domyślnej, bo wywołuje model i potrzebuje klucza.

Na ile jeden plugin jest przenośny między Claude Code, Codex i Cursorem?

Dział zatytułowany „Na ile jeden plugin jest przenośny między Claude Code, Codex i Cursorem?”

Codex 0.157.1 zainstalował acme-db-guard wprost z marketplace’u w formacie Claude, bez manifestu Codeksa, i skopiował do swojego cache każdy folder, łącznie z hookami. Skopiowanie to jeszcze nie aktywacja. Tabela rozdziela jedno od drugiego.

KomponentClaude CodeCodexCursorPrzenośny?
Skille (SKILL.md)TakTakTak, przez "skills" w manifeścieTak: Agent Skills to otwarty standard
Serwery MCP.mcp.json"mcpServers" wskazujące ten sam .mcp.jsonmcp.jsonW większości: ten sam serwer, inny plik albo klucz
Hookihooks/hooks.json, PreToolUse i inne zdarzenia Claudeniesprawdzone, czy hooki w formacie Claude się aktywują; Codex wymaga zaufania hookom pluginu w /hooks, zanim się uruchomią (0.157.1)schemat "version": 1 ze zdarzeniami w camelCase, np. stop i afterAgentResponseNie: napisz i przetestuj jeden plik hooków na narzędzie
Komendy slash, subagenciTakniesprawdzone dla pluginu w formacie ClaudeCursor ma własne foldery commands/ i agents/Nie
Przestrzeń nazw/<plugin>:<skill>niesprawdzoneniesprawdzonePrzetestuj w każdym narzędziu

Praktyczna zasada: procedurę umieść w skillu, a połączenie w serwerze MCP, bo te dwa elementy się przenoszą. Hooki trzymaj cienkie, jako jeden mały skrypt wywoływany z pliku hooków każdego narzędzia, żeby logika istniała raz, nawet jeśli podpięcie nie. W pliku hooków Cursora ("version": 1) wywołuj ten sam skrypt jako "${CURSOR_PLUGIN_ROOT}/scripts/guard-applied-migrations.sh", a nie ścieżką względną wobec katalogu roboczego.

Gdy wydanie pluginu się psuje: jak wrócić do działania

Dział zatytułowany „Gdy wydanie pluginu się psuje: jak wrócić do działania”
  • Zespół nadal używa starego hooka mimo poprawki. Wersja się nie zmieniła albo automatyczne aktualizacje są wyłączone. Podbij version, otaguj wydanie i poproś zespół o claude plugin marketplace update acme-plugins i claude plugin update acme-db-guard@acme-plugins, a potem restart.
  • Hook blokuje każdą edycję. Hook, który przy każdym wywołaniu kończy się kodem 2, odcina agenta od pracy. Od razu wyłącz plugin przez claude plugin disable acme-db-guard@acme-plugins, odtwórz problem testem z JSON-em podanym przez potok i dodaj to wejście jako przypadek testowy przed ponownym wydaniem.
  • Hook nic nie robi na jednym laptopie. Brakuje jq albo git, albo skrypt stracił prawo wykonania w archiwum zip. Sprawdź ls -l na zainstalowanej kopii i spraw, żeby skrypt głośno zawodził, gdy brakuje narzędzia, tak jak robi to skrypt powyżej.
  • Instalacja kończy się błędem Source path does not exist. Plugin przemianowano albo przeniesiono bez aktualizacji pola source. Popraw wpis i w CI waliduj każdy katalog pluginu, nie tylko marketplace.
  • Serwer MCP startuje z pustym ciągiem połączenia. Osoba z zespołu nie wyeksportowała ACME_STAGING_DATABASE_URI. Opisz wymagane zmienne w skillu i w README marketplace’u; nigdy nie wpisuj danych uwierzytelniających na sztywno jako wartości zapasowej.
  • Plugin działa w Claude Code, a w Codeksie po cichu nic nie robi. Codex użył drugiego katalogu albo to komponent, którego Codex nie aktywuje. Uruchom codex plugin list, żeby zobaczyć, który marketplace.json odczytał, i przetestuj każdy komponent w prawdziwej sesji Codeksa.

Jak popularne jest budowanie pluginów i ile kosztuje w kontekście

Dział zatytułowany „Jak popularne jest budowanie pluginów i ile kosztuje w kontekście”

Na dzień 2026-09-26 plugin Anthropic do tworzenia pluginów, plugin-dev, miał 67 663 instalacje w katalogu claude.com/plugins. Oficjalne katalogi zawierały 314 wpisów w claude-plugins-official, 65 w openai-curated Codeksa i 94 w cursor-plugins Cursora (policzone z pliku marketplace’u w każdym repozytorium). Przykład acme-db-guard dokłada około 71 tokenów stale obecnych w każdej sesji, wobec około 2349 dla samego plugin-dev, więc narzędzia do tworzenia pluginów włączaj tylko w sesjach, w których je tworzysz.