writing-skills
writing-skills
Use when creating new skills, editing existing skills, or verifying skills work before deployment
pr-screenshotsEmbed before/after screenshots and annotated images in pull request descriptions. Covers PR description patterns, image upload for Azure DevOps and GitHub, and sizing best practices.
Independent GitHub snapshot ยท Automated classification ยท Original documentation governs
Embed before/after screenshots in pull request descriptions so reviewers can see the visual change without checking out the branch.
Use this skill when a PR changes something visible:
Place screenshots directly in the PR description body. Avoid wrapping them in <details> collapse โ reviewers are more likely to look at images they can see without clicking.
**Before** โ brief description of the problem:

**After** โ brief description of the fix:

Keep the text brief. A sentence or two per image describing what the reader should notice. Let the image carry most of the communication.
For PRs with several visual changes, use separate before/after pairs with headings:
## Filter bar alignment
**Before** โ 1px border clash between adjacent buttons:

**After** โ borders overlap cleanly, hover tint added:

## Chart tooltip
**Before** โ tooltip clipped at container edge:

**After** โ tooltip repositions to stay visible:

<img src="url" width="600" alt="description">
Upload images as PR attachments via the REST API:
$token = az account get-access-token `
--resource "499b84ac-1321-427f-aa17-267ca6975798" `
--query accessToken -o tsv
$base = "https://{org}.visualstudio.com/{projectId}/_apis/git/repositories/{repoId}"
$url = "$base/pullRequests/{prId}/attachments/screenshot.png?api-version=7.1-preview.1"
# Use HttpClient โ Invoke-RestMethod can corrupt binary data
$client = New-Object System.Net.Http.HttpClient
$client.DefaultRequestHeaders.Authorization = `
New-Object System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", $token)
$content = New-Object System.Net.Http.ByteArrayContent(
, [System.IO.File]::ReadAllBytes("screenshot.png")
)
$content.Headers.ContentType = `
[System.Net.Http.Headers.MediaTypeHeaderValue]::new("application/octet-stream")
$resp = $client.PostAsync($url, $content).Result
Reference in the PR description:

Azure DevOps gotchas:
{org}.visualstudio.com NOT dev.azure.com/{org} โ AzDO's markdown renderer uses .visualstudio.com. The dev.azure.com format loads noticeably slowerPOST not PUT (PUT returns 405)7.1-preview.1screenshot-v2.png)HttpClient not Invoke-RestMethod โ IRM can corrupt binary dataโ ๏ธ Work in progress. GitHub's drag-and-drop image upload uses internal endpoints that require browser cookies. There's no clean public API for uploading images to PR descriptions yet.
Current workaround: Commit images to a pr-assets orphan branch and reference via blob URLs (github.com/{owner}/{repo}/blob/pr-assets/{file}?raw=true). It works but is clunky โ contributions for a better approach are welcome.
<details> tags are easy to skipimage-annotations skill to add callouts when the difference isn't immediately obvious