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)
@'
Add a comment:
@' Summary: - ... '@ | gh pr comment 111 --body-file -
Option B: GitHub REST API (PowerShell, no gh) 1) 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.
2) Build headers (minimal) $headers = @{ Authorization = "token $token" 'User-Agent' = 'codex-cli' Accept = 'application/vnd.github+json' }
3) Sanity check auth (useful when you see 404)
Invoke-RestMethod -Method Get -Uri "https://api.github.com/repos/
If this fails with 404, your token likely lacks access.
4) 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
5) 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