Create a pull request for the current branch. Handles uncommitted changes, generates a PR title matching the `[{modules}] {type}: {description}` format enforced by CI, and fills in the PR description template. Trigger: 'create pr', 'open pr', 'submit pr', 'make pr'.
80
100%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Minimize confirmations. The only user confirmation is for uncommitted changes (Step 1.3). Everything after that — drafting, writing file, pushing, creating PR — runs automatically. Tool-level permission prompts (file write, git push) serve as implicit confirmation; do not add extra "are you sure?" pauses on top.
Identify current branch:
git branch --show-currentIf on main — stop and ask the user to create a feature branch first.
Determine base branch: use main unless the user specifies otherwise.
Check for uncommitted changes (only confirmation point):
git status
git diff --statIf there are staged or unstaged changes, show a summary and ask the user:
"There are uncommitted changes. Commit them before creating the PR?"
make quality, stage relevant files (skip .env, credentials, large binaries), commit.make quality fails: stop and report errors.Check for existing PR on this branch:
gh pr view --json number,title,body 2>/dev/nullNote the PR number if one exists.
Check commits ahead of base:
git log origin/main..HEAD --onelineIf the branch has no commits ahead of main, stop — nothing to open a PR for.
Collect the full diff against the base branch:
git diff main...HEAD
git log main..HEAD --onelineIdentify affected modules by mapping changed file paths to allowed module names:
| Path prefix | Module |
|---|---|
veomni/models/ | model |
veomni/trainer/ | trainer |
veomni/data/ | data |
veomni/distributed/ | dist (use parallel when the change is about a parallelism strategy rather than the plumbing) |
veomni/ops/ | ops |
veomni/checkpoint/ | ckpt |
veomni/optim/ | optim |
veomni/lora/ | lora |
configs/ | config |
docs/ | docs |
tests/, .github/workflows/ | ci |
docker/ | docker |
tasks/ | task |
.agents/ | agent |
| anything with a measurable speed/memory claim | add perf |
| other / mixed | misc |
omni, logging and release have no directory of their own — use them
for omni-model, log/telemetry-surface and release-plumbing changes
respectively.
The authoritative module and type lists live in
.github/workflows/check_pr_title.yml (allowedModules / allowedTypes).
Read it rather than trusting this table if a name is rejected.
Determine change type:
| Type | When |
|---|---|
feat | New functionality or capability |
fix | Bug fix |
refactor | Same behavior, better structure |
chore | Maintenance, cleanup, config changes |
test | Test-only changes |
Apply /veomni-review before pushing. Use its applicability rules for
<base>...HEAD, including the documentation self-check and the narrowly
defined exemption for clean, exact reverts or approved-diff reapplications.
Partial reverts, extra edits and conflict resolutions need the normal gate.
Review again before a substantive update to an open PR. A risky verdict
stops the PR: report it and wait for the user.
Draft PR title in [{modules}] {type}: {description} format:
[model, data] feat: ...[BREAKING].github/workflows/check_pr_title.ymlDraft the PR description by reading .github/PULL_REQUEST_TEMPLATE.md
and filling in its sections. Do not reproduce the template from memory — it
changes, and a stale copy silently drops checklist items.
Write to .pr-drafts/ (already in .gitignore):
mkdir -p .pr-draftsFilename convention:
.pr-drafts/<pr-number>.md (e.g. .pr-drafts/123.md).pr-drafts/<branch-name>.md — renamed to PR# after creation.File format — first line is the PR title, blank line, then the description body:
[model] feat: add support for Qwen4
<sections copied from .github/PULL_REQUEST_TEMPLATE.md, filled in>Keep the template's own bullet/checkbox style. Fill every section: an empty
### Test section is the most common review blocker.
Tell the user the draft file path (so they know where to find it if they want to review later).
Push the branch:
git push -u origin HEADCreate or update:
--body-file to avoid shell escaping issues):
# Extract body from draft file (everything after the first blank line)
tail -n +3 .pr-drafts/<branch-name>.md > /tmp/pr-body.md
gh pr create --base <base-branch> --title "<title>" --body-file /tmp/pr-body.md<branch-name>.md to <pr-number>.md.tail -n +3 .pr-drafts/<pr-number>.md > /tmp/pr-body.md
gh pr edit <pr-number> --title "<title>" --body-file /tmp/pr-body.mdOutput the PR URL and the draft file path.
.env, credentials, large binaries and warn the user.b8a3edc
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.