drupal_devkit
What is Drupal DevKit?
Marketplace of marketplaces for Drupal AI coding. Cross-harness installer, skill registry, and developer toolkit.
drupal-devkit lets you subscribe to multiple AI skill sources (marketplaces), enable/disable individual plugins per harness, and install everything with one command. It ships with 36 bundled Drupal-core skills and can pull content from external marketplaces like ai_best_practices and drupal-canvas-plugin.
Everything is driven by one Python CLI: drupal-devkit.
This is not a traditional Drupal module. It is a marketplace registry and cross-harness installer for AI coding skills and agents. All skills follow the agentskills.io open specification. External marketplaces declare their content via drupal-marketplace.json.
Install
Option 1: Universal one-liner (stable release)
curl -sSL https://drupal-devkit.org/install.sh | bash
Installs the latest tagged release. Detects your environment and installed harnesses, installs uv if missing, installs the drupal-devkit Python package, and registers default marketplace sources. Afterwards, run the interactive installer to pick harnesses and plugins:
drupal-devkit install
To track main instead (bleeding edge, breaking changes possible), fetch the script directly from drupalcode.org:
curl -sSL https://git.drupalcode.org/project/drupal_devkit/-/raw/main/install.sh | bash
Or pin to a specific version regardless of URL:
curl -sSL https://drupal-devkit.org/install.sh | DRUPAL_DEVKIT_REF=2.1.0 bash
Option 2: DDEV add-on
ddev add-on get AJV009/ddev-drupal-devkit
Installs drupal-devkit on the host, optionally bootstraps Claude Code inside the DDEV web container, and registers ddev ai, ddev ai-devkit, and ddev claude commands.
Option 3: Manual install
uv tool install drupal-devkit --from "git+https://git.drupalcode.org/project/drupal_devkit.git" drupal-devkit install
Interactive Installer
Running drupal-devkit install starts the interactive installer with a harness selector and plugin selector (yay/pacman style):
Detected harnesses: 1) * claude-code (claude) 2) codex (codex) 3) copilot-cli (copilot) 4) cursor (agent) 5) gemini (gemini) 6) hermes (hermes) 7) kiro (kiro-cli) 8) opencode (opencode) Install to (e.g. 1,2,3 or 'all') [1]: Available plugins: 1) * drupal-devkit/drupal-core (36 skills, 1 agent) 2) * ai_best_practices/ai_best_practices (2 skills, 4 agents) 3) * drupal-canvas-plugin/drupal-canvas (7 skills) Install plugins (e.g. 1,2,3 or 'all') [all]:
Select harnesses and plugins by number (comma-separated) or type all. Claude Code is pre-selected as default.
Non-interactive flags
--harness claude-code,gemini,kiro: install to specific harnesses (comma-separated)--preset drupal-quickstart: install a predefined plugin bundle--yes: skip all prompts, default to Claude Code--global: install to global harness directories instead of project directory
Supported Harnesses (8 Tier 1)
All 8 harnesses have dedicated emitters, install targets, and context file generation:
- Claude Code (
claude):.claude/plugins/, AGENTS.md - GitHub Copilot CLI (
copilot):.github/copilot/plugins/, AGENTS.md - OpenAI Codex (
codex):.agents/plugins/, AGENTS.md - Cursor (
agent):.cursor/plugins/,.cursor/rules/drupal-devkit.mdc - Gemini CLI (
gemini):.gemini/extensions/, GEMINI.md - Kiro (
kiro-cli):.kiro/plugins/+.kiro/skills/(native auto-discovery), AGENTS.md - OpenCode (
opencode):.opencode/plugins/+.opencode/skills/(native auto-discovery), AGENTS.md - Hermes (
hermes):.hermes/plugins/+.hermes/skills/drupal/(category-organized), AGENTS.md
Kiro, OpenCode, and Hermes also get skills copied into their native skill directories for automatic discovery without configuration. Claude-only syntax is stripped from all non-Claude builds.
The Marketplace Architecture
drupal-devkit acts as a registry for independent marketplace sources: git repos that contain AI skills, agents, and configuration. Users subscribe to marketplaces, enable specific plugins, and the content is generated per-harness at install time.
- Subscribe:
drupal-devkit marketplace add URL - Browse:
drupal-devkit plugin list - Enable:
drupal-devkit plugin enable MARKETPLACE/PLUGIN - One-command:
drupal-devkit install --preset drupal-quickstart
Each marketplace is pinned to a specific git commit for reproducible installs. AGENTS.md context files are auto-composed across all enabled plugins.
Available Marketplaces
Default sources (registered on install)
- drupal-devkit: 36 skills covering Drupal 11+ coding standards, entity API,
#[Hook]attribute hooks, service DI, caching, testing, security, Views, JSON:API, SDC, Twig, accessibility, Drush, DDEV - ai_best_practices: canonical Drupal AI guidance from webchick + maintainers (testing, documentation)
- drupal-canvas-plugin: 25 skills + 33 agents for Canvas Code Component development and Drupal-to-Canvas migration (8-phase workflow, 3 plugins)
Community and custom
- drupal-workflow by George Kastanis: session insights, workflow automation
- Your own marketplace: any git repo with a
skills/directory or adrupal-marketplace.jsonmanifest
Workbenches
A workbench is a self-contained Drupal workspace — its own install.sh, entry-point script, .claude/ directory, and data dirs. Unlike plugins (which inject skills into your current project), a workbench clones a whole project into a path you pick and runs its own setup.
First-party workbenches:
- drupal-contrib-workbench: hands-free Drupal.org contribution workflow (fetch → classify → fix → review → push gate) with 9 subagents, beads cross-issue memory, and mechanical enforcement hooks.
- canvas-storybook-ai: AI-powered Drupal Canvas component workspace. Interactive installer routes between local Node.js and DDEV modes, sets up Drupal OAuth, and launches Claude Code inside the project.
Install and manage:
drupal-devkit workbench list drupal-devkit workbench info drupal-contrib-workbench drupal-devkit workbench install drupal-contrib-workbench --path ~/work/contrib
Uninstalling removes the state entry only — the directory is left in place so your local data (DRUPAL_ISSUES/, .beads/, in-progress fixes) is never destroyed by devkit.
One-shot install from any git URL or local path:
drupal-devkit workbench install --from https://example.com/my-workbench.git --path ~/work/x drupal-devkit workbench install --from /path/to/local/workbench --path ~/work/x
Future workbenches (frontend, backend, QA, module experimentation, test harnesses, etc.) follow the same pattern. See the Workbench Type specification for the manifest schema and install flow.
CLI Reference
Install and Uninstall
install [--preset NAME] [--harness H1,H2] [--yes] [--global]: interactive or preset-based installuninstall [--global] [--yes]: remove devkit files from project or global dirs
Marketplace Commands
marketplace add URL [--ref BRANCH] [--name NAME]: register a marketplace sourcemarketplace list: show registered marketplaces with pinned commitsmarketplace refresh [NAME]: fetch latest from remotemarketplace remove NAME: unregister a marketplace
Plugin Commands
plugin list [--marketplace NAME] [--installed]: list available or enabled pluginsplugin search KEYWORD: find plugins by name or descriptionplugin info MARKETPLACE/PLUGIN: show details (skills, agents, hooks, mcp)plugin enable MARKETPLACE/PLUGIN [--target HARNESS]: install a pluginplugin disable MARKETPLACE/PLUGIN: remove an installed plugin
Workbench Commands
workbench list: list registered workbenches (auto-tags the current one if you're inside one)workbench info NAME: show manifest details (entry point, prerequisites, skill policy)workbench install NAME [--path PATH] [--ref REF] [--plugin P1,P2] [--harness H1,H2] [--skip-install-script] [--yes]: clone + run setupworkbench install --from URL_OR_PATH [--name NAME] [--path PATH]: one-shot registration + install from a git URL or local pathworkbench uninstall NAME [--path PATH]: remove from state (files untouched)
Other Commands
doctor: show harnesses, marketplaces, enabled plugins, sync statusbuild [--plugin NAME] [--harness NAME]: regenerate per-harness build outputseval SKILL [--layer all|l1|l2|l3] [--trials N]: 3-tier eval harnessbump major|minor|patch: lockstep version bumpversion: show version info
Shipped Presets
drupal-quickstart: drupal-core + ai_best_practices skillscanvas-dev: full Canvas + migration toolkit from drupal-canvas-plugin
drupal-marketplace.json
Sources can ship a drupal-marketplace.json manifest at the repo root to define plugin groupings, custom paths, and metadata. Without a manifest (Level 0), all skills are grouped into one plugin named after the source directory.
Conformance levels:
- L0 (Heuristic): no manifest needed, auto-discovery from
skills/ - L1 (Manifest):
drupal-marketplace.jsonwith plugin grouping - L2 (Full metadata): license, maintainer, descriptions
- L3 (Shared eval): eval coverage specifications
See the Source Specification for full details.
Eval Harness
3-layer eval runner: Gemma 3 4B (local via Ollama), Claude Haiku 4.5, Claude Opus 4.6. Deterministic grader with must_contain_any, must_not_contain, syntax_check (via php -l), and check_markdown_structure. Each marketplace source owns its own eval cases.
Relationship to ai_best_practices
drupal-devkit is the cross-harness delivery layer for the Drupal AI ecosystem. ai_best_practices is the canonical skill source maintained by webchick + community. They're complementary: ai_best_practices owns skill content and evaluation; devkit owns installation, cross-harness generation, and marketplace registry. Both are consumable as marketplace sources.
Creating Your Own Marketplace
Any git repo with skills can be a drupal-devkit marketplace source. At minimum, add skills/your-skill-name/SKILL.md files and users can subscribe immediately (Level 0 heuristic detection). For richer metadata, add a drupal-marketplace.json manifest at the repo root. See the Source Specification.
Contributing
Contributions are welcome through this project's issue queue and merge requests. Whether it's improving existing skills, adding new ones, creating your own marketplace source, or porting skills upstream to ai_best_practices.
See the Contributing Guide for details.
License
GPL-2.0-or-later: compatible with Drupal's project licensing.