Fix ux paper cut
Agent skills for shipping small paper-cut maintenance PRs
npx -y skills add tomquirk/papercut-skills --skill fix-ux-paper-cutAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Find, fix, verify, and publish one small low-risk UX paper cut in a target web app. Use when Codex should inspect localhost:3000 or another local app URL, including signup, sign-in, and authenticated app pages, choose an isolated visual, copy, layout, accessibility, or layout-shift nuisance, apply a contained frontend fix, capture before/after screenshots, run checks, and open a draft PR whose description includes a before/after screenshot table.
SKILL.md
8.0 KB, as published. Nobody here has run it
Fix UX Paper Cut
Use this skill to ship exactly one tiny, screenshot-visible UX improvement from discovery through draft PR. Prefer judgement, restraint, and a clean paper trail over cleverness.
Paper-Cut Ideas
fix-loading-state-paper-cut: Improve one loading skeleton, spinner, or disabled state so the page does not jump, flicker, or feel broken.
Workflow
-
Prepare the repo.
- Read
AGENTS.md,doc/index.md, and any relevant docs for the touched area before changing behaviour. - Run
git status -sband preserve unrelated user work. - Work against
http://localhost:3000unless the user provides a different URL. - Use
browser:control-in-app-browserfor visual inspection and screenshots when available. For authentication, follow the repo browser-login guidance in.agents/skills/agent-browser/SKILL.md: try the saved local insider state first, then sign in as the documented local test user if needed.
- Read
-
Explore auth and app surfaces.
- Start signed out. Visit
/signin,/signup, and one pricing-to-signup path; step through forms far enough to inspect validation, loading, and success or verification states. - If creating a signup account is useful, use disposable local-only credentials and stop before external checkout, real payment, or non-local email-provider flows unless a documented local test path covers them.
- Then load the saved state or sign in and sample a few authenticated app pages from the main navigation, such as browse, ask, account/settings, billing, organisation, admin, or available content pages.
- Keep this as discovery, not broad QA. Stop exploring once one clear screenshot-visible paper cut appears.
- Do not use production accounts, real customer data, or real payment details.
- Start signed out. Visit
-
Find one candidate.
- Inspect a small number of obvious surfaces, using desktop and mobile viewports when practical.
- Watch for obvious layout shift during load, refresh, interaction, and viewport changes, especially content jumping after data, images, fonts, or auth state resolve.
- Choose a candidate only when it is visible in a screenshot, easy to reproduce locally, and likely fixable in one small component, route, style, or copy change.
- Prefer issues like poor contrast ratio, inconsistent colours, text truncation, cramped spacing, unclear microcopy, poor focus/hover state, awkward empty state layout, inconsistent alignment, missing accessible label, a small responsive layout defect, a visible layout shift, or one loading skeleton, spinner, or disabled state that makes the page feel jumpy, flickery, or broken.
- Ignore button label casing by itself; do not choose title-case, sentence-case, or capitalisation-only changes as the paper cut.
- Reject anything involving payments, auth semantics, permissions, data model changes, migrations, analytics meaning, broad design direction, legal/marketing copy, new dependencies, or more than a few closely related files.
- Once a candidate passes the filter, stop hunting and commit to that one issue.
-
Capture the baseline.
- Record the route, viewport, relevant user state, and minimal reproduction steps.
- Note when the shift happens, such as initial load, refresh, tab switch, data arrival, image load, font swap, resize, or interaction.
- Save a before screenshot outside the committed source tree, such as
tmp/ux-paper-cut/<slug>-before.png. - If the screenshot contains sensitive data, choose a safer route/state or redact before using it in the PR.
-
Apply the smallest fix.
- Follow existing component, styling, and naming patterns.
- Keep the patch narrow; avoid opportunistic refactors.
- Update docs only when behaviour or canonical product explanation changes.
- Do not add dependencies unless the user explicitly approves and the repo health check is run afterwards.
-
Verify the result.
- Reload the local app and revisit the exact same route, viewport, and state.
- Save an after screenshot next to the before screenshot.
- Compare the screenshots visually; if the improvement is not obvious, refine once or pick a smaller clearer candidate.
- Re-check for layout shift using the same trigger from the baseline, and make sure the fix does not introduce a new jump elsewhere in the viewport.
- Run
pnpm prafter code changes. Add targeted checks likepnpm typecheckorpnpm testwhen the touched area warrants them.
-
Publish the PR.
- Use the GitHub
yeetworkflow for branch, commit, push, and draft PR creation. - Stage only files that belong to this paper-cut fix.
- Prefer a branch name like
codex/fix-<short-ux-issue>and a terse commit message. - Create the draft PR with a temporary screenshot note if needed, then upload the screenshots using the GitHub screenshot upload procedure below and replace the PR body with the final description.
- Do not leave local filesystem paths in the PR description. If image upload is blocked, keep the PR draft and tell the user what is needed.
- Use the GitHub
GitHub Screenshot Upload
GitHub does not provide a direct image upload API for PR bodies. Use the PR comment composer as a temporary upload target, extract the generated https://github.com/user-attachments/assets/... URLs, clear the unsent comment, then update the PR body with gh pr edit.
-
Resolve the PR and image paths.
- Get the PR number and URL with
gh pr view --json number,url -q '"\(.number) \(.url)"'. - Convert the before and after screenshot paths to absolute paths.
- If a path contains awkward shell characters or screenshot-tool Unicode, copy it to
/tmp/<simple-name>.pngbefore upload.
- Get the PR number and URL with
-
Open the PR page with a browser tool that supports file upload and JavaScript evaluation.
- Prefer the active browser automation available in the session; use
tool_searchto find browser upload tools when needed. - If GitHub asks for login or SSO, open the login flow for the user and wait for confirmation before continuing.
- Prefer the active browser automation available in the session; use
-
Upload both screenshots in the PR comment composer.
- Scroll to the comment area and find a file input, trying selectors like
input[type="file"][id*="comment"],input[type="file"][id="fc-new_comment_field"], theninput[type="file"]. - Upload the before and after images to the same unsent comment, waiting a few seconds for GitHub to process them.
- Read the comment textarea value with
document.getElementById('new_comment_field') || document.querySelector('textarea[id*="comment"]'). - Extract the two
user-attachments/assetsURLs before clearing the textarea. Do not submit the comment. - If the textarea has not been populated yet, wait a few more seconds and retry once.
- Scroll to the comment area and find a file input, trying selectors like
-
Update and verify the PR body.
- Use the uploaded URLs in the screenshot table, preserving the route, viewport, and verification notes.
- Update the draft PR with
gh pr edit <number> --body-file <body-file>or the equivalent GitHub tool from theyeetworkflow. - Reload the PR page and confirm the before/after images render in the description.
PR Description
Use a concise PR body with this shape:
## Summary
- Fixes <one-sentence UX paper cut>.
- Keeps the change contained to <file/component/surface>.
## Screenshots
Route: `<route>`
Viewport: `<width>x<height>`
Layout shift checked: `<trigger and result>`
| Before | After |
| --- | --- |
| <img src="<uploaded-before-image-url>" alt="Before: <short description>" width="480"> | <img src="<uploaded-after-image-url>" alt="After: <short description>" width="480"> |
## Verification
- `pnpm pr`
If a required check cannot run, keep the PR draft and state the blocker and next step in Verification.