kramme-cc-workflow/skills/kramme:pr:copy-review/SKILL.md
Review PR and local changes for unnecessary, redundant, or duplicative UI text — labels, descriptions, placeholders, tooltips, and instructions that the UI already communicates through its structure. Supports inline report output with --inline.
npx skillsauth add abildtoft/kramme-cc-workflow kramme:pr:copy-reviewInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
4 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Review branch changes and local work for unnecessary UI text. Finds labels, descriptions, placeholders, tooltips, and instructions that duplicate what the UI already communicates through structure, icons, or interaction patterns.
Arguments: "$ARGUMENTS"
--base <branch> flag provided, store as explicit base branch override--threshold N flag provided, store as custom_threshold (0-100). Only findings with confidence >= N will be reported. If not provided, set custom_threshold=75.--inline flag provided, set INLINE_MODE=trueAGENTS.md, CLAUDE.md, .github/copilot-instructions.md, markdown instruction files in repo-root .claude/, or equivalents).Determine the correct base branch using a 3-tier strategy:
Tier 1: Explicit override If --base <branch> was provided in Step 1, use that value directly as BASE_BRANCH. Skip Tier 2 and 3.
Tier 2: PR target branch detection
BASE_BRANCH=$(gh pr view --json baseRefName --jq '.baseRefName' 2> /dev/null)
Tier 3: Fallback
BASE_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2> /dev/null | sed 's@^refs/remotes/origin/@@')
[ -z "$BASE_BRANCH" ] && BASE_BRANCH=$(git branch -r | grep -E 'origin/(main|master)$' | head -1 | sed 's@.*origin/@@')
Normalize before using origin/$BASE_BRANCH (handles values like origin/develop and refs/heads/develop):
BASE_BRANCH=${BASE_BRANCH#refs/heads/}
BASE_BRANCH=${BASE_BRANCH#refs/remotes/origin/}
BASE_BRANCH=${BASE_BRANCH#origin/}
if [ -z "$BASE_BRANCH" ]; then
echo "Error: Could not determine base branch. Re-run with --base <branch>." >&2
exit 1
fi
if ! git check-ref-format --branch "$BASE_BRANCH" > /dev/null 2>&1; then
echo "Error: Base branch '$BASE_BRANCH' is not a valid branch name. Re-run with --base <branch>." >&2
exit 1
fi
if ! git fetch origin "refs/heads/${BASE_BRANCH}:refs/remotes/origin/${BASE_BRANCH}" 2> /dev/null; then
echo "Error: Failed to fetch origin/$BASE_BRANCH. Check remote access and re-run with --base <branch>." >&2
exit 1
fi
if ! git rev-parse --verify --quiet "origin/$BASE_BRANCH" > /dev/null; then
echo "Error: Base branch 'origin/$BASE_BRANCH' not found. Re-run with --base <branch>." >&2
exit 1
fi
Then identify changed files from all four sources:
BASE_REF=$(git merge-base origin/$BASE_BRANCH HEAD)
{
git diff --name-only "$BASE_REF"...HEAD # committed PR diff
git diff --name-only --cached # staged local changes
git diff --name-only # unstaged local changes
git ls-files --others --exclude-standard # untracked local files
} | sed '/^$/d' | sort -u
Filter for UI-relevant files only:
*.tsx, *.jsx, *.vue, *.svelte, *.component.ts, *.component.html*.html, *.hbs, *.ejs, *.pugpages/, views/, screens/, routes/, app/ directories*.json files in locales/, i18n/, translations/ directoriesAfter identifying the changed UI files, discover any additional nested instruction files that apply to those files (for example AGENTS.md, CLAUDE.md, .github/copilot-instructions.md, markdown instruction files in a nearby .claude/ directory, or tool-specific equivalents) and merge those constraints into the conventions from Step 2 before launching the reviewer agent.
If no UI-relevant files found, reply inline with the following message (regardless of INLINE_MODE) and stop. Do not create or update COPY_REVIEW_OVERVIEW.md.
No UI-relevant files detected in this PR or local working tree.
Changed files: {comma-separated list of file extensions or paths from the unified change scope}
No UI copy to review.
If COPY_REVIEW_OVERVIEW.md exists in the project root:
Launch kramme:copy-reviewer via the Task tool with:
BASE_BRANCH from Step 3git diff $(git merge-base origin/$BASE_BRANCH HEAD)...HEADgit diff --cachedgit diffgit ls-files --others --exclude-standard (agent should treat these as new files and review full file content)After collecting findings from the copy reviewer:
BASE_BRANCHIf COPY_REVIEW_OVERVIEW.md was found in Step 4:
After validation and filtering, organize findings into severity tiers:
If INLINE_MODE=true:
assets/copy-review-report-format.mdCOPY_REVIEW_OVERVIEW.mdOtherwise:
COPY_REVIEW_OVERVIEW.md in the project root using the report format from assets/copy-review-report-format.md/kramme:workflow-artifacts:cleanupIf Critical or Important findings were found:
INLINE_MODE=false, suggest running /kramme:pr:resolve-review and point it at COPY_REVIEW_OVERVIEW.md (e.g., pass the file contents or run in the same session so chat context contains the report).INLINE_MODE=true, suggest re-running with the inline report content passed as the argument: /kramme:pr:resolve-review <paste report> — or invoke it in the same session so chat context contains the report.Organize findings summary in the terminal output:
# Copy Review Complete
## Relevance Filter
- X findings validated as in-scope
- X findings filtered (pre-existing or out-of-scope)
- X findings filtered (previously addressed)
## Results
- Critical: X
- Important: X
- Suggestions: X
Report output: {inline reply | COPY_REVIEW_OVERVIEW.md}
To resolve findings: `/kramme:pr:resolve-review`
/kramme:pr:copy-review
/kramme:pr:copy-review --base develop
/kramme:pr:copy-review --threshold 85
/kramme:pr:copy-review --inline
development
Compare an existing PR's title and body against the actual branch diff and report drift — false claims, missing major changes, stale scope, missing risk callouts. Use after pushing changes to a branch with an open PR, or before requesting review. Read-only by default; add --fix to delegate to kramme:pr:generate-description for an updated description. Complements kramme:pr:code-review (which checks description accuracy as one signal among many code-quality checks) by being a fast, focused, single-purpose check that runs in seconds.
tools
Reviews plugin skills for focused scope, progressive disclosure, portability, safety, retry behavior, and documentation quality. Use when auditing a SKILL.md, skill directory, or proposed skill text against skill-authoring standards. Not for creating new skills, editing skills, or reviewing ordinary application code.
development
Conversational QA intake session - user describes bugs they encountered, the agent lightly clarifies, explores the codebase in the background for domain language, and files durable Linear or SIW tickets one issue at a time. Use when the user has multiple bugs from a manual QA pass and wants to log them rapidly without per-issue deep interviews. Not for live-app browser testing (use kramme:qa), not for tracing the root cause of a single bug or applying a fix (use kramme:debug:investigate), not for one well-refined ticket with a 5-round interview (use kramme:linear:issue-define).
testing
(experimental) Record, check, append, or reconsider rejected enhancement concepts in the project's `.out-of-scope/` directory. One markdown file per concept; substantive reason + prior-request list. Use when the team rejects an enhancement and wants to remember why, or when checking whether a new request matches a prior rejection. Not for bug rejections (close as wontfix with a comment), not for deferrals (use issue priority/status instead), not for cross-repo aggregation.