name: commit-and-pr
description: Creates Arena-conformant commits and pull requests. Enforces DCO sign-off (git commit -s), no AI attribution lines (no Co-Authored-By, no Generated-with-Claude footers), // branch naming, separate new commits rather than --amend when iterating on PR feedback, and main as the default base branch. Use when the user asks to commit, stage changes, push the current branch, open a pull request, make a PR, submit changes, or mark work as ready to merge.
disable-model-invocation: true
allowed-tools: Bash(git *) Bash(pre-commit *) Bash(gh pr create *) Bash(gh pr view *)
Commit and Pull Request
Creates commits and PRs that follow Arena's contributor guidelines.
Commit
Run the
pre-commit-checkskill (orpre-commit run --all-fileson the host — pre-commit is not installed in the container) until the working tree is clean. Do not commit through hook failures.Stage specific files rather than using
git add -A— this avoids accidentally committing dotfiles, credentials, or large untracked artifacts.Sign off the commit (per
CONTRIBUTING.md— Arena currently requires DCO sign-off; the policy is on the books but not yet CI-enforced):git commit -s -m "<subject>"Subject line: imperative mood, ~50 characters, no trailing period.
- Good:
Fix attribute access on wrapped env - Bad:
Fixed the attribute access on the wrapped env.(past tense, trailing period)
- Good:
Body (when needed): blank line after the subject, wrap at 72 chars, explain what and why — not how (the diff shows that).
No AI attribution lines. Do not include
Co-Authored-By: Claude...,Generated with Claude Code, or similar footers. The DCO sign-off is the only required trailer.
Use a heredoc for multi-paragraph messages so quoting stays clean:
git commit -s -m "$(cat <<'EOF'
<subject>
<body paragraph 1>
<body paragraph 2>
EOF
)"
Branch
Branch naming: <username>/<type>/<short-description> where <type> is one of feature, fix, docs, refactor, chore, ci, and <short-description> is kebab-case.
Examples: <username>/feature/video-recording, <username>/fix/eval-runner-teardown, <username>/docs/update-readme.
Do not use top-level type prefixes that omit the username (e.g. feature/foo, fix/bar).
Pull request
Push the branch (set upstream on first push):
git push -u origin <branch-name>Open the PR against
main(the active branch):gh pr create --base main \ --title "<short imperative subject>" \ --body "<see body format below>"PR title follows the same rules as a commit subject: imperative, ~70 chars max, no trailing period.
PR body follows
.github/pull_request_template.md:## Summary <one-line description of the change, ≤50 chars> ## Detailed description - <why the change was needed> - <what was changed> - <impact / what to watch for>Keep it terse — 2–5 detail bullets total. Agent-generated PR bodies tend toward 5+ sections and 500+ words; resist that. The template's bullet form is the standard.
Iterating on review feedback
When addressing review comments, add new commits. Do not --amend and force-push, because reviewers need to see each round of changes as a discrete commit.
# good
git commit -s -m "Address review: rename foo to bar"
git push
# avoid
git commit --amend
git push --force
The exception: if a single commit is purely a typo fix in your own as-yet-unmerged work and no one has reviewed it, --amend is fine.
Verify
Before declaring the work done:
gh pr view --json title,baseRefName
Confirm:
baseRefNameismain.- Title has no trailing period and is in imperative mood.