Skip to main content
Plugins sind in der Beta. Verhalten und Konfiguration können sich in zukünftigen Releases ändern.
Ein Plugin ist ein Bündel von Skills, 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 beschrieben.

Ein Plugin installieren

Als Plugin-Quelle sind ein GitHub-owner/repo, eine Git-URL oder ein lokaler Pfad möglich:
# 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.

Plugins verwalten

# 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-pluginskills/<name>/SKILL.md bearbeiten → Änderungen werden in der nächsten Sitzung übernommen, kein update erforderlich.

Das Manifest

.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>:…).
{
  "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.

Abhängigkeiten und Governance

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

requiredPlugins

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.

optionalPlugins

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).

forbiddenPlugins

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.