From devboy
Automates full issue shipping cycle: reads ticket details, creates git branch, implements changes, commits/pushes, opens GitHub/GitLab MR/PR, links back via comment. For scoped tasks like 'implement DEV-123'.
npx claudepluginhub meteora-pro/devboy-tools --plugin devboyThis skill uses the workspace's default tool permissions.
Take a ticket from "assigned" to "review-ready MR with a comment on the issue pointing at it". The skill wraps the typical loop: read the issue, cut a branch, do the work, push, open an MR on the configured Git provider, and leave a breadcrumb on the issue so the next person can follow the trail.
Implements features or fixes from GitHub, Linear, or GitLab issues by registering the issue, fetching details, applying safety guidelines, creating a branch, committing, and opening a PR.
Drives GitHub/GitLab issue implementation through iterative review cycles: research, plan, worktree, code, test, PR/MR, multi-reviewer fixes to APPROVE, merge.
Executes GitHub issues by reading content with read-github-issue, delegating tasks to frontend-implementer or general-purpose-assistant sub-agents, running tests/lint, committing on worktree, and creating PRs via commit-push and create-pr.
Share bugs, ideas, or general feedback.
Take a ticket from "assigned" to "review-ready MR with a comment on the issue pointing at it". The skill wraps the typical loop: read the issue, cut a branch, do the work, push, open an MR on the configured Git provider, and leave a breadcrumb on the issue so the next person can follow the trail.
If the request is vague, run get-issues first to surface the ticket, then come back here.
Always start with the full ticket — description, comments, links:
devboy tools call get_issue '{"key": "DEV-123"}'
Pay attention to:
blocked_by is non-empty, surface that and stop. The skill does not fight upstream blockers.Pick a short, human-readable branch name that embeds the issue key:
feat/DEV-123-add-bulk-archive
fix/DEV-456-pipeline-badge-stale
chore/DEV-789-rotate-signing-keys
Rules:
feat/, fix/, chore/, docs/, or refactor/ depending on the work.DEV-123, not dev-123).Standard local Git flow — the skill does not wrap these in devboy tools. Base the branch off the remote's default head rather than hardcoding main, so the flow keeps working on repos whose default is master or something else:
git fetch origin
DEFAULT_BRANCH_REF="$(git symbolic-ref refs/remotes/origin/HEAD)" # e.g. refs/remotes/origin/main
git switch -c feat/DEV-123-add-bulk-archive "$DEFAULT_BRANCH_REF"
# ... write the code, run tests, verify locally ...
git add -p
git commit -m "feat(issues): add bulk archive (DEV-123)"
git push -u origin HEAD
Commit messages should follow the repo's convention and end with the issue key in parentheses so the tracker auto-links them. Avoid Fixes DEV-123 / Closes #123 phrasing on the commit — see the guardrail below.
create_merge_request is the unified tool — it opens a GitLab MR or a GitHub PR depending on the configured provider. Title and source_branch / target_branch are required. Set target_branch to the repo's actual default branch — do not hardcode main; derive it from git symbolic-ref refs/remotes/origin/HEAD (strip the refs/remotes/origin/ prefix) so the call works on repos defaulted to master or a custom branch:
devboy tools call create_merge_request '{
"title": "feat(issues): add bulk archive (DEV-123)",
"description": "Implements DEV-123.\n\n## What changed\n- Added `bulkArchive` action to the issue list\n- New keyboard shortcut `shift+a`\n\n## How to test\n1. Select multiple issues\n2. Press `shift+a`\n3. Confirm they move to the archived state\n\nRelates to DEV-123.",
"source_branch": "feat/DEV-123-add-bulk-archive",
"target_branch": "<repo-default-branch>",
"draft": false,
"labels": ["feature"],
"reviewers": ["alice"]
}'
Record the MR key (mr#<n> for GitLab, pr#<n> for GitHub) — the next step needs it.
Close the loop so anyone looking at the ticket finds the work:
devboy tools call add_issue_comment '{
"key": "DEV-123",
"body": "Opened for review: mr#42 — `feat/DEV-123-add-bulk-archive`."
}'
Include:
Report back to the user with:
Then stop. Review happens in review-mr, fixing review comments happens in fix-review-comments.
Fixes keyword pipeline wired up on the MR description — use it there if the repo convention supports it, but do not call update_issue with state: closed from this skill.create-issue instead of widening this change.main (or the repo's default branch), and its description references the issue.review-mr on the resulting MR.fix-review-comments when reviewers come back.