skills/drupalorg-contribution-helper/SKILL.md
Quick help with drupal.org contribution workflows including git commands, branch naming, issue fork setup, and merge request creation. Invoke when user asks "how do I contribute to drupal.org?", "drupal.org git workflow", "issue fork", "drupal merge request", or needs help with git.drupalcode.org commands.
npx skillsauth add kanopi/cms-cultivator drupalorg-contribution-helperInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Quick assistance with drupal.org contribution workflows, git commands, and merge request creation.
Activate this skill when the user:
The drupalorg-cli package provides helpful shortcuts for drupal.org contribution:
# Install
curl -LO https://github.com/mglaman/drupalorg-cli/releases/latest/download/drupalorg.phar
chmod +x drupalorg.phar
sudo mv drupalorg.phar /usr/local/bin/drupalorg
# Create branch for issue (inside project directory)
drupalorg issue:branch 3456789
# Apply latest patch from issue
drupalorg issue:apply 3456789
# Generate patch from local changes
drupalorg issue:patch
# List project issues
drupalorg project:issues paragraphs
# Open issue in browser
drupalorg issue:link 3456789
# Clone any drupal.org project
git clone [email protected]:project/{project_name}.git
# Examples
git clone [email protected]:project/paragraphs.git
git clone [email protected]:project/webform.git
git clone [email protected]:project/easy_lqp.git
{issue_number}-{description-slug}
Examples:
3456789-fix-validation-error
3456789-add-ckeditor5-support
3456789-update-documentation
Rules:
Remote naming follows {project}-{issue} convention to allow multiple issue forks per project:
# Add issue fork remote
git remote add {project}-{issue_number} [email protected]:issue/{project}-{issue_number}.git
# Examples
git remote add paragraphs-3456789 [email protected]:issue/paragraphs-3456789.git
git remote add easy_lqp-3456790 [email protected]:issue/easy_lqp-3456790.git
# Fetch from issue fork
git fetch {project}-{issue_number}
# Verify remotes
git remote -v
Issue #{issue_number}: {description}
Example:
Issue #3456789: Fix validation error in configuration form
# Push branch to issue fork
git push {project}-{issue_number} {branch_name}
# Example
git push paragraphs-3456789 3456789-fix-validation-error
# Clone to isolated location (recommended)
mkdir -p ~/.cache/drupal-contrib
git clone [email protected]:project/{project}.git ~/.cache/drupal-contrib/{project}
cd ~/.cache/drupal-contrib/{project}
Issue forks must be created via the drupal.org web UI. This cannot be automated due to CAPTCHA protection.
https://www.drupal.org/project/{project}/issues/{issue_number}Note: This step cannot be done via command line or API.
git remote add {project}-{issue_number} [email protected]:issue/{project}-{issue_number}.git
git fetch {project}-{issue_number}
# If branch already exists on fork, checkout tracking it:
git checkout -b '{issue_number}-{description}' --track {project}-{issue_number}/'{issue_number}-{description}'
# If creating new branch:
git checkout -b {issue_number}-{description}
# Make your code changes
# ...
# Stage and commit
git add .
git commit -m "Issue #{issue_number}: {description}"
git push {project}-{issue_number} {branch_name}
When you push, git outputs the MR creation URL:
remote: To create a merge request for {branch}, visit:
remote: https://git.drupalcode.org/issue/{project}-{issue}/-/merge_requests/new?...
Open that URL in your browser to complete MR creation.
Alternative: Via Web UI
ls -la ~/.ssh/id_*.pub
ssh-keygen -t ed25519 -C "[email protected]"
cat ~/.ssh/id_ed25519.pubssh -T [email protected]
If your network blocks SSH port 22, use HTTPS with a personal access token:
# Create token at: https://git.drupalcode.org/-/user_settings/personal_access_tokens
# Required scopes: read_repository, write_repository
# For clone:
git clone https://{username}:{token}@git.drupalcode.org/project/{project}.git
# For issue fork remote:
git remote add {project}-{issue} \
"https://{username}:{token}@git.drupalcode.org/issue/{project}-{issue}.git"
Verify SSH key is added to git.drupalcode.org:
Verify issue fork exists:
Verify remote is correct:
git remote -v
# Should show: {project}-{issue} [email protected]:issue/{project}-{issue}.git
You must create the issue fork via drupal.org web UI first:
# If local branch exists
git checkout {existing_branch}
# If remote branch exists
git fetch {project}-{issue_number}
git checkout -b {branch} --track {project}-{issue_number}/{branch}
# Make additional changes
git add .
git commit -m "Issue #{issue_number}: Additional fixes"
# Push updates (existing MR updates automatically)
git push {project}-{issue_number} {branch_name}
Example 1: Quick Workflow Question
User: "How do I create a merge request for drupal.org?"
Skill response:
1. Clone the project
2. Create issue fork on drupal.org (click button in web UI - required manual step)
3. Add remote: `git remote add {project}-{issue} [email protected]:issue/{project}-{issue}.git`
4. Fetch: `git fetch {project}-{issue}`
5. Create branch: `git checkout -b {issue_number}-{description}`
6. Commit with: `Issue #{issue_number}: description`
7. Push: `git push {project}-{issue} {branch}`
8. Open MR creation URL from git output in browser
Example 2: Branch Naming Help
User: "What should I name my branch for issue 3456789?"
Skill response:
Use: `3456789-{brief-description}`
Examples:
- `3456789-fix-validation`
- `3456789-update-docs`
- `3456789-add-feature`
Create it with:
```bash
git checkout -b 3456789-your-description
**Example 3: Remote Setup Help**
User: "I created the issue fork, now what?"
Skill response: Add the issue fork as a remote:
git remote add {project}-{issue_number} [email protected]:issue/{project}-{issue_number}.git
git fetch {project}-{issue_number}
Replace {project} with your project name and {issue_number} with your issue number.
Then push your branch:
git push {project}-{issue_number} {your-branch-name}
## Resources
- [Drupal.org GitLab Guide](https://www.drupal.org/docs/develop/git/using-gitlab-to-contribute-to-drupal)
- [Creating Issue Forks](https://www.drupal.org/docs/develop/git/using-gitlab-to-contribute-to-drupal/creating-issue-forks)
- [git.drupalcode.org](https://git.drupalcode.org)
tools
Strategist-focused site audit for discovery and pre-discovery. Given a site URL and optional qualitative research data, navigates the site via CoWork, audits against all 21 UX Laws from lawsofux.com, reviews content hierarchy, synthesises qualitative data, runs Lighthouse, and produces two deliverables — a Project Knowledge Summary (Markdown for Claude Desktop Projects) and a polished, iterable HTML Artifact for client sharing. Use when a strategist, UX lead, or PM asks for a discovery audit, UX laws audit, content hierarchy review, pre-discovery site review, "audit this site for strategy", "strategist audit", "UX audit", or pastes a site URL with discovery context. Not for developer audits — use accessibility-audit, performance-audit, or live-site-audit for those.
development
Provide story point estimation guidance with hour calculations for software development tasks. Uses Fibonacci sequence (1, 2, 3, 5, 8, 13, 21, 34+) and converts story points to hours. Includes platform-specific adjustments and velocity calculations.
tools
Perform a full QA review of a Teamwork task by reading the task and all its comments for context, extracting the multi-dev URL, generating dynamic validation steps tailored to the task type, and using CoWork browser automation to execute those steps on the multi-dev environment. Produces a structured validation report with pass/fail per step, screenshots, internal notes, and a client-facing summary — all shown in chat. Use this skill whenever the user asks to QA, test, validate, or review a Teamwork task or multi-dev environment — even if they just say "can you QA this?" or paste a Teamwork link. Also triggers for phrases like "run QA on", "check the multi-dev", "validate this task", "test the dev link", or "review the ticket". Works across Drupal/CMS updates, WordPress/plugin updates, bug fixes, new feature development, and general web development tasks.
tools
Generate a client-facing project heartbeat / status update message for a Kanopi project, ready to be posted as a Teamwork message. Use this skill whenever the user asks to write, draft, generate, or send a project update, heartbeat, status update, or progress report to a client. Also triggers when the user says things like "time for a project update", "draft the heartbeat", "write up the update for [project]", or "it's been two weeks, let's send an update". Always use this skill — even if the user doesn't say "heartbeat" — whenever the intent is to summarise recent project activity for a client audience.