Install the "issue-fix" agent skill from https://github.com/mono/SkiaSharp/tree/main/.agents/skills/issue-fix into .claude/skills/issue-fix/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "issue-fix", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add mono/SkiaSharp --skill issue-fix -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "issue-fix" agent skill from https://github.com/mono/SkiaSharp/tree/main/.agents/skills/issue-fix into .agents/skills/issue-fix/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "issue-fix", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add mono/SkiaSharp --skill issue-fix -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "issue-fix" agent skill from https://github.com/mono/SkiaSharp/tree/main/.agents/skills/issue-fix into .cursor/skills/issue-fix/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "issue-fix", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add mono/SkiaSharp --skill issue-fix -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "issue-fix" agent skill from https://github.com/mono/SkiaSharp/tree/main/.agents/skills/issue-fix into .gemini/skills/issue-fix/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "issue-fix", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
GitHub CLI
$ gh skill install mono/SkiaSharp issue-fix
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add mono/SkiaSharp --skill issue-fix -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "issue-fix" agent skill from https://github.com/mono/SkiaSharp/tree/main/.agents/skills/issue-fix into .github/skills/issue-fix/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "issue-fix", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add mono/SkiaSharp --skill issue-fix -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "issue-fix" agent skill from https://github.com/mono/SkiaSharp/tree/main/.agents/skills/issue-fix into .opencode/skills/issue-fix/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "issue-fix", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
issue-fix
GitHub stars
5.6k
Token cost
~5.1k tokens
SKILL.md length
2,126 words
Files
8 (incl. scripts, references)
Skills in repo
21
Repo updated
First seen
Licence
MIT
At a glance
Fix bugs in SkiaSharp C bindings. An agent skill from mono/SkiaSharp.
Works in 9 steps: Understand the Issue (pipeline intake) → Create Draft PR → Research Related Issues (delta) → …
Tasks that involve Debugging
SKILL.md covers ⛔ CRITICAL: SEQUENTIAL…, Workflow Overview, Prerequisites and Phase 1: Understand the Issue…, plus 6 more sections
Runs PowerShell and Python scripts from its folder; calls docker, git and dotnet
What it does
Issue Fix is an agent skill from mono/SkiaSharp. Fix bugs in SkiaSharp C bindings. Structured workflow for investigating, fixing, and testing bug reports. Triggers: Crash, exception, AccessViolationException, incorrect output, wrong behavior, memory leak, disposal issues, "fails", "broken", "doesn't work", "investigate issue", "fix issue", "look at NNNN", any GitHub issue number referencing a bug. For adding new APIs, use api-add-review skill instead.
Its SKILL.md is about 5.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including scripts and reference files (for example `references/docker-testing.md`, `references/fix-examples.md` and `references/fix-schema.json`).
It sits in Development, covering Debugging, Performance optimization and QA and bug reports. It works with GitHub and C#. The repository describes itself as: SkiaSharp is a cross-platform 2D graphics API for .NET platforms based on Google's Skia Graphics Library. It provides a comprehensive 2D API that can be used across mobile… The licence is MIT.
When your agent uses it
Tasks that involve Debugging
Tasks that involve Performance optimization
Tasks that involve QA and bug reports
Example prompts
“broken”
“t work”
“investigate issue”
“/issue-fix”
Requirements
Python 3
PowerShell
Docker
Workflow steps
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 51e2097. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Runs code
Ships 3 files in scripts/ (PowerShell and Python), which the agent can run.
Shell commands in SKILL.md call:
docker
git
dotnet
pwsh
gh
bash
apt-get
python3
From the folder's file list and the shell code blocks in SKILL.md.
Network
No URLs in SKILL.md. Its commands use docker, git and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Issue Fix loads about 5.1k tokens when it runs, and up to ~13k if it reads all its reference files. Until then it costs about 105 tokens; SKILL.md has 2,126 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~105
When it runs· the whole SKILL.md, loaded when a task matches
~5.1k
With references· SKILL.md plus every file in references/, read only if the agent opens them
~13k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check passed
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
Download SKILL.mdSave it as .claude/skills/issue-fix/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.
name
issue-fix
description
Fix bugs in SkiaSharp C# bindings. Structured workflow for investigating, fixing, and testing bug reports.
Triggers: Crash, exception, AccessViolationException, incorrect output, wrong behavior, memory leak, disposal issues, "fails", "broken", "doesn't work", "investigate issue", "fix issue", "look at #NNNN", any GitHub issue number referencing a bug.
For adding new APIs, use `api-add-review` skill instead.
STOP at each phase gate. Do not proceed until gate criteria are met.
Phases may be abbreviated when ai-triage/{n}.json and/or ai-repro/{n}.json exist — but you must explicitly consume them and meet the gate with evidence (don’t redo the work).
NEVER say "in parallel" — phases are strictly sequential.
NEVER start new research (Phase 3) before PR exists (Phase 2).
NEVER use store_memory — fixes produce JSON artifacts and PRs, not memories.
Workflow Overview
1. Understand → Fetch issue, consume ai-triage/ai-repro if present
2. Create PR → 🛑 STOP: Create PR before ANY *new* research
3. Research → Delta research (triage already did first-pass)
4. Reproduce → Prefer ai-repro project; Docker only if needed
5. Investigate → Root cause (guided by repro version matrix + triage codeInvestigation)
6. Fix → Minimal change
7. Test → Regression test + existing tests
8. Finalize → Rewrite PR description, link all fixed issues
9. Fix JSON → Generate, validate, and persist ai-fix/{n}.json
Prerequisites
GitHub API access (fetch issues, search issues, read comments)
Git with push access
Local data cache worktree (docs-data-cache) for ai-triage/ai-repro handoff
Docker for cross-platform testing (optional; check: docker --version)
All collected info, links, and related issues (added as you find them)
WHY each related issue is similar (same platform? same error? same root cause?)
Your investigation plan with checkboxes
Progress log (add rows as you work)
Alternatives tried (add when something doesn't work)
Update the PR description OFTEN — after every significant step.
✅ GATE: Do not proceed until you have:
Feature branch created and pushed
Draft PR opened with investigation template
"copilot" label added to PR
⛔ AFTER PHASE 2: Verify PR exists before continuing
🛑 STOP. Verify the PR URL exists before proceeding to Phase 3.
Only after confirming the PR is created should you begin research.
Phase 3: Research Related Issues (delta)
🛑 PREREQUISITE: Phase 2 must be complete. PR must exist.
If you have not created the draft PR yet, STOP and go back to Phase 2.
If ai-triage/NNNN.json exists, it already contains:
related issues discovered during workaround/duplicate search
code investigation entry points
workaround proposals and missing info
Your job in Phase 3 is delta research only:
confirm/expand on the most relevant related issues (especially ones with diagnosis in comments)
run additional searches only if triage confidence is low, triage is stale, or repro contradicts triage
🛑 CRITICAL: This phase often SOLVES the bug.
The community may have already diagnosed the root cause in issue comments.
READ ALL COMMENTS on the most relevant related issues before investigating yourself.
Search GitHub issues for:
Same error message (e.g., undefined symbol: uuid_generate_random)
Same platform (e.g., Linux ARM64)
Same SkiaSharp version
Keywords from title
For EACH related issue found:
Read ALL comments (not just the issue body) — diagnosis is often in comments!
Note: issue number, title, WHY it's related
Extract: workarounds mentioned, root cause analysis, resolution if closed
Check for links to external issues (other projects that use SkiaSharp)
Update PR with all related issues and extracted information.
✅ GATE: Do not proceed until you have:
Searched for related issues (at least 2-3 search queries)
Read ALL comments on the most relevant related issues
Updated PR with related issues and any diagnosis found
If a related issue already contains the root cause diagnosis, document it in the PR,
but you MUST still proceed to Phase 4 (Reproduce) to validate the hypothesis.
Phase 4: Reproduce (prefer ai-repro)
⛔ REPRODUCTION IS MANDATORY.
This phase is satisfied either by:
Re-running the minimal repro locally, OR
Consuming an existingai-repro/NNNN.json that already reproduced the issue on the relevant version/platform and includes the minimal repro source.
Even if you think you know the root cause from Phase 3:
Community diagnosis could be a workaround, not the real fix
The hypothesis could be wrong or incomplete
You need evidence, not assumptions
If ai-repro/NNNN.json exists and conclusion is reproduced:
Rehydrate the repro source from reproductionSteps[].filesCreated[].content into a local folder (e.g., /tmp/skiasharp/repro/NNNN/) and run it.
Prefer this NuGet-based repro as the baseline; use Docker only if the host cannot exercise the target platform.
If no ai-repro exists:
Reproduce using the same approach as issue-repro (standalone NuGet project first; Docker only when needed).
# Replace with the platform from the issue
docker run --platform linux/arm64 -it <dotnet-sdk-image> bash
4.3 Document Results in PR
Add to PR description:
Environment
Version
Result
[Platform from issue]
[version]
❌ Crashes
[Different platform]
[version]
✅ Works
4.4 If Reproduction Fails
Try hard and exhaust all options before giving up:
Try different Docker base images (different Linux distros)
Try older/newer .NET versions
Try the exact SkiaSharp version AND the last known working version
Check if issue mentions specific hardware or configurations
Download and use any reproduction project attached to the issue
Try minimal reproduction code from the issue verbatim
Document each attempt in PR. After exhausting ALL options: ask user for details, but still proceed with code review while waiting.
✅ GATE: Do not proceed until you have:
Either (a) re-ran the minimal repro, or (b) consumed ai-repro/NNNN.json as the baseline reproduction record
Documented the reproduction evidence/results in the PR (including version matrix)
If reproduction failed: documented what was tried and asked user for help
Phase 5: Investigate Root Cause
💡 Often already done! If Phase 3 found a diagnosis in related issue comments,
this phase is just confirmation. Don't re-investigate what's already known.
Committed with descriptive message referencing issue number
Phase 7: Build & Test
If Modified Native Code
bash
dotnet cake --target=externals-macos --arch=arm64 # macOS ARM64
dotnet cake --target=externals-linux --arch=arm64 # Linux ARM64 (in Docker)
If Modified C# Only
bash
dotnet cake --target=externals-download # If output/native/ empty
Write Regression Test
Affected Class
Test File
SKCanvas
tests/Tests/SKCanvasTest.cs
SKBitmap
tests/Tests/SKBitmapTest.cs
SKImage
tests/Tests/SKImageTest.cs
Other
Find matching *Test.cs
Name: Issue_NNNN_BriefDescription()
Run Tests
bash
dotnet test tests/SkiaSharp.Tests.Console.slnx
Run the solution unfiltered first. If it identifies a failure, use the owning core,
singleton, Vulkan, or Direct3D project for filtered diagnostic iterations; do not filter
the .slnx because projects with zero matches fail under Microsoft.Testing.Platform.
After the focused test passes, rerun the unfiltered solution.
Tests MUST pass. Only the final unfiltered solution run satisfies the gate. Verify the fix
on the original platform.
✅ GATE: Do not proceed until you have:
Built successfully
All tests pass
Verified fix resolves the original issue (if possible)
Write to /tmp/skiasharp/fix/{timestamp}/{number}.json — use this exact literal path, do NOT substitute $TMPDIR or any other variable. {timestamp} is the current UTC time in yyyyMMdd-HHmmss format. Create the directory first with mkdir -p.
meta: schemaVersion "1.0", number, repo, analyzedAt (ISO 8601 UTC)
Before marking complete, verify ALL gates were passed:
Phase 1: Issue understood, key details extracted
Phase 2: Draft PR created and used as living document
Phase 3: Related issues searched, ALL comments read, diagnosis collected
Phase 4: Baseline reproduction established (re-ran repro or consumed ai-repro/NNNN.json)
Phase 5: Root cause identified and documented
Phase 6: Minimal fix implemented
Phase 7: Build passes, tests pass
Phase 8: PR finalized with "Fixes #NNNN"
Phase 9: Fix JSON generated, validated with validate-fix.ps1/.py (saw ✅), and persisted
Anti-Patterns
See the triage and repro anti-patterns references for the full lists. Critical rules for fix:
#0 (CRITICAL): NEVER use store_memory. Fixes produce JSON artifacts and PRs, not memories.
#1 (CRITICAL): NEVER skip the validation script. You MUST run validate-fix.ps1 (or .py fallback) and see ✅ before persisting. Mentally checking fields is not validation. If the script isn't run, the fix JSON is invalid.
#2 (CRITICAL): NEVER skip phases or reorder them. Sequential execution is required — see the ⛔ block at the top.
Issue Fix next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
Triage a SkiaSharp GitHub issue or PR into structured JSON with classification (type, area, platform, severity), suggested response, automatable actions, and companion Markdown/HTML reports.
Analyze Skia features for SkiaSharp - produces a unified analysis of what shipped (upstream engine benefits, PR links, migration guides) and what's missing (impact/priority/effort scoring, hidden…
Fix bugs in SkiaSharp C bindings. An agent skill from mono/SkiaSharp. Issue Fix is an agent skill from mono/SkiaSharp. Fix bugs in SkiaSharp C bindings.
When should I use Issue Fix?
Issue Fix fits situations like: tasks that involve Debugging; tasks that involve Performance optimization; tasks that involve QA and bug reports.
How do I install Issue Fix in Claude Code?
Run `npx skills add mono/SkiaSharp --skill issue-fix -a claude-code`. Or copy the skill folder (.agents/skills/issue-fix in mono/SkiaSharp) into .claude/skills/issue-fix in your project. Claude Code loads it when a task matches its description.
How do I install Issue Fix in Codex?
Run `npx skills add mono/SkiaSharp --skill issue-fix -a codex`. Or copy the skill folder (.agents/skills/issue-fix in mono/SkiaSharp) into .agents/skills/issue-fix in your project. Codex loads it when a task matches its description.
Can I use Issue Fix in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mono/SkiaSharp --skill issue-fix -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/issue-fix, .gemini/skills/issue-fix, .github/skills/issue-fix and .opencode/skills/issue-fix in your project.
What does Issue Fix need to run?
Going by SKILL.md and its folder, Issue Fix needs PowerShell and Python for the scripts in its folder and the command-line tools its instructions call (docker, git, dotnet, pwsh, gh and bash). Our summary lists: Python 3; PowerShell; Docker.
Does Issue Fix access the network?
SKILL.md contains no URLs. Its commands use docker, git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Is Issue Fix safe to install?
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
What licence does Issue Fix use?
Issue Fix is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Issue Fix use?
About 5.1k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7.6k tokens, read only when the agent opens those files.
What are the alternatives to Issue Fix?
Skills that share tags, products or a category with Issue Fix: OpenROAD Issue Triage (The-OpenROAD-Project/OpenROAD, 3.2k stars), Prp Debug (Wirasm/prp, 2.3k stars), Prp Debug (Wirasm/prp, 2.3k stars) and Triage Issue (softspark/ai-toolkit, 179 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Issue Fix?
mono (a GitHub organization) maintains it in mono/SkiaSharp, which has 5,585 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 8, 2026.
Source: mono/SkiaSharp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.