Plugins are in closed beta. To request access, contact support@cognition.ai. Behavior and configuration may change in future releases.
What are plugins?
A plugin is a bundle of skills — and optionally rules, hooks, and MCP servers — packaged together so it can be installed and reused as a unit. Where a skill lives in a single repo, a plugin is a portable source (a GitHub repo, a git URL, a subfolder of a repo, or an uploaded.zip) that you can require across your whole org or enterprise.
Managed plugins let an admin install plugins centrally, from the Devin web app, so they apply to everyone in the org or enterprise — no per-user setup. This covers cloud Devin sessions and Devin CLI users logged into the account (enterprise/account-level config reaches the CLI too — see cloud sessions vs. the CLI). When a plugin is installed, its skills become available to Devin automatically as /<plugin>:<skill> commands.
This page covers the cloud (web app) side of plugins. For the plugin file format and the CLI’s per-user install flow, see the CLI plugins reference.
Where to configure them
Go to Settings → Marketplace. The page has two tabs:- Marketplace — browse plugins (the Devin official catalog plus any your org or enterprise has added) and install them. Installing a plugin adds it to the manifest of the chosen scope as a required plugin, so it’s installed for everyone in that scope.
- Configuration — edit the raw plugin manifest as JSON, and upload your own plugin as a folder or
.zip(or build one in the editor).
- Org admins (organization settings access) manage the org manifest.
- Enterprise admins (enterprise settings access) additionally manage the shared enterprise manifest.
The manifest
The manifest is a single JSON document with three lists:requiredPlugins— installed for everyone in scope (recursively, including any plugins they depend on).optionalPlugins— an allow-list that endorses plugins without auto-installing them; used to carve out exceptions to a forbidden entry.forbiddenPlugins— a deny-list of plugin identities or glob patterns (e.g.acme/*, or"*"for a full lockdown).
requiredPlugins / optionalPlugins is a source — either a string shorthand or an object:
All GitHub forms for the same repo (
owner/repo, the HTTPS URL, the .git URL, the SSH form) refer to the same plugin identity.
The manifest is stored verbatim; the agent validates the full source at install time.
Governance rules
forbiddenPlugins entries are matched against plugin identities:
- An exact identity, written as
owner/repoor a git URL. All GitHub forms of the same repo (owner/repo, the HTTPS URL, the.gitURL, the SSH form) refer to the same identity. - A glob pattern — any entry containing
*. The*matches any sequence of characters, including/:acme/*matches all ofacme’s GitHub repos,*/secretsmatches a repo namedsecretsunder any owner, andhttps://gitlab.com/acme/*matches any repo under that path. - The lone
"*", which matches everything else (a full lockdown).
- Deny wins. A plugin is blocked if any active manifest or installed plugin forbids it. If nothing forbids anything, nothing is blocked.
- Self-override. A manifest’s (or plugin’s) own
requiredPluginsandoptionalPlugins— and, for a plugin, the plugin itself — are exempt from its own forbidden list, so"forbiddenPlugins": ["*"]plus"optionalPlugins": ["acme/approved"]means “allow only what this manifest lists; forbid everything else.” The carve-out covers only those direct entries, not a required plugin’s transitive dependencies — list those explicitly under a lockdown. - No cross-scope re-permitting. One manifest’s or plugin’s allow-list cannot re-permit what another forbids. A
"forbiddenPlugins": ["*"]lockdown can’t be defeated from a lower scope.
- Install time — installing a blocked plugin (or one whose required plugins can’t be satisfied, or whose name collides with an installed plugin) is refused.
- Load time — a plugin blocked after it’s already installed stays on disk, but its skills are skipped at session start with a warning naming the forbidder.
Adding your own plugins
A plugin is just a directory containing a.devin-plugin/plugin.json manifest and a skills/ folder of ordinary skills:
- Rules — an
AGENTS.mdat the plugin root is injected as an always-on rule in every session — in cloud sessions and the CLI alike. Markdown files in arules/folder are loaded too, honoring theirtriggerfrontmatter — see the CLI plugins reference. - Hooks — a
hooks.jsonat the plugin root registers lifecycle hooks that run in the session. Cloud sessions runcommandhooks for every event exceptSessionStartandSessionEnd— soPreToolUse,PostToolUse,PermissionRequest,UserPromptSubmit,Stop, andPostCompactionall work;prompt-type hooks are CLI/local-only. - MCP servers — an
mcp_config.jsonat the plugin root declares MCP servers ("mcpServers": { "<name>": { … } }) that load in every session where the plugin is installed. They don’t yet appear in the MCP settings UI, but their tools are available to Devin. A plugin’s MCP config may set an OAuth client ID and scopes, but never an OAuth client secret — a server config carrying one is rejected at activation. - Custom subagents —
agents/<name>.md(oragents/<name>/AGENT.md) profiles. These currently load only in local Devin agents — the Devin CLI and Devin Desktop — not in cloud sessions.
requiredPlugins) — you can’t install individual skills from a plugin. To offer skills separately, split them into separate plugins. See the CLI plugins reference for the full plugin.json format and local authoring flow.
Depending on where the plugin lives, add it in one of these ways:
One repo (or one
git-subdir subfolder) is one plugin. A single repo can host many plugins as subfolders, each referenced with its own git-subdir entry.
Uploading a plugin bundle
On the Configuration tab, the Uploaded plugin section lets you upload a plugin as a folder or.zip, or build one directly in the editor. Saving it adds it to the manifest as a required plugin (installing it for everyone in scope); deleting it removes the reference. This is a good option for a plugin you don’t want to (or can’t) host in a git repo.
Using a private skills repo
Point the manifest straight at the private repo — you generally don’t need to bake it into your environment snapshot. Any private repo Devin can already reach through your Git integration installs automatically. Use the git URL form, orgit-subdir to install a plugin from a subfolder of a shared repo. (CLI users covered by the same manifest fetch with their own local git credentials, so they’ll need access to the repo too.)
If the repo isn’t reachable through your Git integration, either upload it as a bundle (above) or clone it during environment setup and reference it with a local path.
How updates roll out
- Manifest changes (Settings → Marketplace) apply to the next session.
- Plugin changes — merging to the branch a plugin tracks reaches new sessions automatically, within a few hours. Pin the plugin to a commit SHA to control updates yourself; on the CLI,
devin plugins updaterefreshes immediately. - Running sessions keep what they loaded at start — updates never change a session mid-flight.
Compatibility
Claude plugins work too: if there’s no.devin-plugin/plugin.json, Devin falls back to a .claude-plugin/plugin.json. When both manifests are present, the Devin one wins.
Scope and inheritance
Managed manifests exist at up to two levels:- Standalone accounts have a single account manifest that applies to everyone.
- Enterprises have a shared enterprise manifest that is inherited by every child org, plus a per-org manifest layered below it. The Marketplace view shows both, and enterprise admins can choose to install a plugin at the enterprise scope (applies everywhere) or an org admin can install it at just their org.
- Enterprise / account manifest (this page)
- Org manifest (this page)
- Repo-level plugin config (a repo’s
.devin/config.json) - User-level plugins — a person’s own CLI installs, which apply only to their local Devin agent and never load in cloud sessions
Cloud sessions vs. the CLI
Both cloud Devin sessions and the Devin CLI enforce the enterprise/account manifest — required plugins are installed and forbids are enforced for CLI users logged into the account too. The org manifest applies only to cloud sessions. The CLI authenticates at the account level and has no org context, so org-level requires and forbids don’t reach CLI users. Put anything you need enforced in the CLI (or account-wide) in the enterprise/account manifest, and use the org manifest for org-specific additions to cloud sessions.Learn more
- Skills — the
SKILL.mdprocedures that plugins bundle - CLI plugins reference — plugin file format, authoring, and per-user install
- Playbooks — reusable prompt templates attached to sessions

