GitHub PR Edit (Title/Body/Comments)
Edit PR title/body/comments on Windows. Use gh when available; otherwise use the GitHub REST API.
Before You Start
-
Identify:
-
owner and repo (e.g. yiyousiow000814/XAUUSD-Calendar-Agent )
-
PR number (e.g. 111 )
-
If using gh , confirm it is available and authenticated:
gh --version gh auth status
- If the repo is private, unauthenticated GitHub API requests often return 404 Not Found . Treat 404 as “likely unauthorized” unless you are sure the repo/PR does not exist.
Option A (Preferred): GitHub CLI (gh )
If gh is installed and authenticated:
Update title and body (use stdin/body-file to avoid literal \n issues)
@' <markdown body> '@ | gh pr edit 111 --title "chore: ..." --body-file -
Add a comment:
@' Summary:
- ... '@ | gh pr comment 111 --body-file -
Option B: GitHub REST API (PowerShell, no gh )
- Get an auth token (do not print it)
Preferred sources (pick the first available):
-
$env:GITHUB_TOKEN or $env:GH_TOKEN
-
Reuse the credential Git already has (works if you previously authenticated with a PAT):
$cred = "protocol=httpsnhost=github.comn`n" | git credential fill
$token = (($cred | Select-String -Pattern '^password=').Line).Substring(9)
Do not Write-Host $token , do not log headers.
- Build headers (minimal)
$headers = @{ Authorization = "token $token" 'User-Agent' = 'codex-cli' Accept = 'application/vnd.github+json' }
- Sanity check auth (useful when you see 404)
Invoke-RestMethod -Method Get -Uri "https://api.github.com/repos/<owner>/<repo>" -Headers $headers | Select-Object full_name, private
If this fails with 404 , your token likely lacks access.
- Update PR title/body
Use UTF-8 bytes for reliable encoding (Chinese text, punctuation).
$payload = @{ title = 'chore: ...' body = @" Summary:
- ... "@ } | ConvertTo-Json -Depth 5
$bytes = [System.Text.Encoding]::UTF8.GetBytes($payload)
Invoke-RestMethod -Method Patch -Uri "https://api.github.com/repos/<owner>/<repo>/pulls/<number>"
-Headers $headers -ContentType 'application/json; charset=utf-8'
-Body $bytes
- Add a PR comment (optional)
PR comments are issue comments:
$payload = @{ body = "Summary:`n- ..." } | ConvertTo-Json -Depth 5 $bytes = [System.Text.Encoding]::UTF8.GetBytes($payload)
Invoke-RestMethod -Method Post -Uri "https://api.github.com/repos/<owner>/<repo>/issues/<number>/comments"
-Headers $headers -ContentType 'application/json; charset=utf-8'
-Body $bytes
Deterministic Helper Script (Recommended)
Use the bundled script for fewer quoting/encoding mistakes:
- .codex/skills/github-pr-edit/scripts/patch_pr.ps1