> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Plugins

> Installieren und teilen Sie Bündel von Skills aus einem Repo, einer Git-URL oder einem lokalen Ordner.

<Note>
  Plugins sind in der **Beta**. Verhalten und Konfiguration können sich in zukünftigen Releases ändern.
</Note>

Ein **Plugin** ist ein Bündel von [Skills](/de/cli/extensibility/skills/overview), das Sie
aus einem GitHub-Repo, einer Git-URL oder einem lokalen Ordner installieren und
projektübergreifend wiederverwenden können. Beim Installieren eines Plugins werden seine Skills als
`/<plugin>:<skill>`-Slash-Befehle verfügbar, und es kann automatisch andere Plugins einbinden, von denen es abhängt.

Ein Plugin ist einfach eine Quelle, die Folgendes enthält:

```
my-plugin/
├── .devin-plugin/
│   └── plugin.json     # Das Plugin-Manifest
└── skills/
    └── review/
        └── SKILL.md    # Ein gewöhnlicher Skill
```

Das `skills/`-Verzeichnis enthält normale Skills — Plugins bringen kein neues Skill-
Format mit. Das Format von `SKILL.md` wird unter [Skills erstellen](/de/cli/extensibility/skills/creating-skills) beschrieben.

***

<div id="installing-a-plugin">
  ## Ein Plugin installieren
</div>

Als Plugin-Quelle sind ein GitHub-`owner/repo`, eine Git-URL oder ein lokaler Pfad möglich:

```bash theme={null}
# Von GitHub
devin plugins install acme/review-tools

# Von einem beliebigen Git-Host
devin plugins install https://gitlab.com/acme/review-tools.git

# Aus einem lokalen Ordner (ideal zum Entwickeln)
devin plugins install ./my-plugin
```

Vor der Installation zeigt Devin an, was das Plugin hinzufügt — welche Skills es bereitstellt,
welche erforderlichen Plugins automatisch installiert werden und welche Richtlinie es einführt
(zum Beispiel, wenn es andere Plugins verbietet). Übergeben Sie `-y` / `--yes`, um die
Abfrage zu überspringen.

Plugins werden auf **Nutzer**-Ebene installiert und sind in all Ihren
Projekten verfügbar.

***

<div id="managing-plugins">
  ## Plugins verwalten
</div>

```bash theme={null}
# Installierte Plugins, ihre Versionen und ob welche durch eine Richtlinie blockiert sind, auflisten
devin plugins list

# Skills eines Plugins sowie seine Pflicht-/optionalen/verbotenen Listen anzeigen
devin plugins info review-tools

# Ein Plugin (oder alle Plugins) in der neuesten Version erneut abrufen
devin plugins update review-tools
devin plugins update

# Ein Plugin entfernen (automatisch installierte Pflicht-Plugins bleiben erhalten)
devin plugins remove review-tools
```

Lokale Plugins sind direkt mit ihrem Quellordner verknüpft, daher sind Änderungen sofort wirksam:
`devin plugins install ./my-plugin` → `skills/<name>/SKILL.md` bearbeiten → Änderungen
werden in der nächsten Sitzung übernommen, kein `update` erforderlich.

***

<div id="the-manifest">
  ## Das Manifest
</div>

`.devin-plugin/plugin.json` beschreibt das Plugin. Nur `name` ist erforderlich; der Wert
muss unter den installierten Plugins eindeutig sein (er bildet den Namespace `/<name>:…`).

```jsonc theme={null}
{
  "name": "review-tools",
  "version": "1.0.0",
  "description": "Code-review skills for our team",
  "requiredPlugins": [
    "acme/secure-base",
    { "source": "github", "repo": "acme/audit-logging" }
  ],
  "optionalPlugins": [
    "acme/deploy-tools",
    { "source": "url", "url": "https://gitlab.com/acme/extra.git" }
  ],
  "forbiddenPlugins": ["sketchy-org/bad-plugin", "acme/*", "*"]
}
```

Unterstützte Metadatenfelder: `name`, `version`, `description`, `author`
(`{ name, email }`), `homepage`, `repository`, `license` und `keywords`.

Ein Eintrag für eine Abhängigkeit ist eine **Quelle** – entweder eine Kurzschreibweise als String oder ein Objekt:

* `"owner/repo"` → GitHub
* `"https://…"`, `"git@…"`, `"ssh://…"` → git-URL
* `{ "source": "github", "repo": "owner/repo" }`
* `{ "source": "url", "url": "https://gitlab.com/team/plugin.git" }`

Alle GitHub-Formen für dasselbe Repo (`owner/repo`, die HTTPS-URL, die `.git`
URL, die SSH-Form) verweisen auf dieselbe Plugin-Identität.

***

<div id="dependencies-and-governance">
  ## Abhängigkeiten und Governance
</div>

Ein Plugin kann drei Listen definieren, sodass ein einzelnes Plugin als kuratierte,
verwaltete Sammlung anderer Plugins dienen kann.

<div id="requiredplugins">
  ### `requiredPlugins`
</div>

Wird automatisch (rekursiv) mitinstalliert, wenn das Plugin installiert wird. Wenn ein erforderliches Plugin
durch eine Richtlinie blockiert wird, schlägt die gesamte Installation fehl — eine Teilinstallation ist nicht möglich.

<div id="optionalplugins">
  ### `optionalPlugins`
</div>

Eine **Allowlist** von Plugins, die von diesem Plugin ausdrücklich erlaubt werden. Sie werden **nicht**
automatisch installiert; die Liste ist nur als Ausnahme für einen verbotenen Eintrag
relevant (siehe unten).

<div id="forbiddenplugins">
  ### `forbiddenPlugins`
</div>

Eine **Verbotsliste**. Jeder Eintrag ist eines von Folgendem:

* Eine exakte Plugin-Identität, geschrieben als `owner/repo`, eine Git-URL oder ein lokaler Pfad.
* Ein **Glob-Muster** — jeder Eintrag, der `*` enthält. Das `*` steht für eine beliebige Folge von
  Zeichen, einschließlich `/`. Muster werden zuerst in die kanonische
  Identitätsform normalisiert, sodass `acme/*` zu `https://github.com/acme/*` wird (alle
  GitHub-Repos von `acme`), `*/secrets` auf ein Repo namens `secrets` unter
  einem beliebigen Owner passt und `https://gitlab.com/acme/*` auf jedes Repo unter diesem Pfad passt.
* Das einzelne `"*"`, das auf jedes andere Plugin passt (ein unumgehbarer Lockdown).

Die Richtlinienregeln sind:

* **Verbote haben Vorrang.** Ein Plugin wird blockiert, wenn irgendein installiertes Plugin es verbietet (über seine
  exakte Identität, ein passendes Glob-Muster oder `"*"`).
* **Selbst-Ausnahme.** Die eigenen `requiredPlugins`, `optionalPlugins` und
  das Plugin selbst sind von seiner **eigenen** Verbotsliste ausgenommen. Also bedeutet
  `forbiddenPlugins: ["*"]` zusammen mit `optionalPlugins: [B, C]` „erlaube
  mich selbst, B und C; verbiete alles andere.“
* **Keine pluginübergreifende erneute Freigabe.** Die Erlaubnislisten eines Plugins können nicht erneut erlauben,
  was **ein anderes** Plugin verbietet. Ein installiertes Plugin mit
  `forbiddenPlugins: ["*"]` ist ein unumgehbarer Lockdown.
* **Standardmäßig offen.** Wenn kein installiertes Plugin irgendetwas verbietet, wird nichts blockiert.

Die Richtlinie wird an zwei Punkten durchgesetzt:

* **Bei der Installation** — die Installation eines blockierten Plugins (oder eines, dessen erforderliche Plugins
  nicht erfüllt werden können oder dessen Name mit einem installierten Plugin kollidiert) wird
  verweigert.
* **Beim Laden** — wenn ein Plugin nach der Installation blockiert wird (zum Beispiel, wenn später ein
  verbietendes Plugin installiert wird), bleibt es auf dem Datenträger, aber seine Skills werden
  beim Start der Sitzung übersprungen, mit einer Warnung, die das Plugin nennt, das es verbietet.
