| name | push-pr |
| description | Commits changes, pushes to remote, and creates or updates a pull request for the current branch. Use when the user says "push pr", "create pr", "push and create pr", or invokes "codagent:push-pr".
|
codagent:push-pr
Commit all changes, push to the remote, and create or update the pull request for the current branch.
Steps
-
Run validator detection
- Run
agent-validator detect 2>&1
- Exit 0 → gates would run, invoke
agent-validator:validator-run skill and wait for it to pass before proceeding
- Exit 2 → no gates would run (no changes or no applicable gates), skip to Step 2
- Exit 1 → error, report the error to the user and stop
- Any other exit code → treat as error, report output to the user, and stop
-
Check for uncommitted changes using git status --porcelain
- If there are changes, create a commit:
- Run
git diff --staged and git diff to see what's changed
- Generate a concise, descriptive commit message based on the changes
- Stage changed files by name (avoid staging sensitive files like
.env or credentials)
- Commit with:
git commit -m "message"; add -m "Co-Authored-By: <Name> <email>" only when the co-author identity is explicitly configured or provided by the user
- If there are no changes, proceed to push check
-
Push to remote
- Get current branch:
git branch --show-current
- Push with upstream tracking:
git push -u origin <branch>
- If push fails, show the error and stop
-
Check if PR exists
- Run
gh pr view --json url,title,state,number,headRefOid while capturing stdout, stderr, and exit code
- If the command exits non-zero and stderr indicates no pull requests were found for the branch, treat it as no PR existing and proceed to creation
- If the command exits non-zero for auth, network, API, or other errors, report stderr and stop
- If the command succeeds but output is empty or invalid JSON, report the unexpected output and stop
- Otherwise, parse the
state field from the JSON response
- If PR exists and is OPEN:
- Check if there are new commits by comparing current HEAD with PR's
headRefOid
- If new commits exist:
- Get default branch:
gh repo view --json defaultBranchRef --jq .defaultBranchRef.name
- Get all commits for the description:
git log <default-branch>..HEAD --oneline
- Regenerate the PR description based on all commits (including the new ones)
- Update the PR:
gh pr edit <pr-number> --body "updated description"
- Print: "PR updated with new commits: "
- If no new commits: print "PR already exists: "
- If PR exists but is CLOSED:
- Print: "Previous PR is closed, creating new PR"
- Create a new PR (follow creation steps below)
- If no PR exists, create one:
- Get default branch:
gh repo view --json defaultBranchRef --jq .defaultBranchRef.name
- Get commit history for PR description:
git log <default-branch>..HEAD --oneline
- Generate a clear PR title and description based on the commits and change context
- Create PR:
gh pr create --base <default-branch> --title "title" --body "description"
- Print the PR URL
-
Print the PR URL at the end so it's easy to find
Notes
- Operates on the current branch — does NOT create or switch branches
- Uses descriptive commit messages that explain the "why" not just the "what"
- PR descriptions should summarize the changes and their purpose
- Always include the PR URL in the final output
- Can be invoked standalone at any point without prior workflow state