Agent skill

Investigating Bug Reports

by parawanderer in parawanderer/OpenTagViewer

Read a GitHub bug report completely - every comment and every image - before diagnosing or asking the reporter for more.

MITAuto-check passedTesting & QA

Install Investigating Bug Reports

skills CLI
$ npx skills add parawanderer/OpenTagViewer --skill investigating-bug-reports -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install parawanderer/OpenTagViewer investigating-bug-reports --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/parawanderer/OpenTagViewer.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/investigating-bug-reports .claude/skills/investigating-bug-reports && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
investigating-bug-reports
GitHub stars
420
Token cost
~1.7k tokens
SKILL.md length
915 words
Files
1
Skills in repo
5
Repo updated
First seen
Licence
MIT

At a glance

Read a GitHub bug report completely - every comment and every image - before diagnosing or asking the reporter for more.

  • Works in 4 steps: Pull the whole thread, not the body → Read the images. This is the one that… → Know which post each image belongs to,… → …
  • Triaging an issue here
  • SKILL.md covers 1. Pull the whole thread, not…, 2. Read the images. This is…, 3. Know which post each image… and 4. Only then reason about the…, plus 4 more sections
  • Calls gh and curl; reaches github.com and user-images.githubusercontent.com

What it does

Investigating Bug Reports is an agent skill from parawanderer/OpenTagViewer. Read a GitHub bug report completely - every comment and every image - before diagnosing or asking the reporter for more. Use whenever triaging an issue here, answering a reporter, or deciding a report lacks detail.

Its SKILL.md is about 1.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Testing & QA, covering QA and bug reports. It works with GitHub. The repository describes itself as: Track your AirTags, iDevices and other FindMy devices on Android. The licence is MIT.

When your agent uses it

  • Triaging an issue here
  • Answering a reporter
  • Deciding a report lacks detail

Example prompts

  • “/investigating-bug-reports”

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Pull the whole thread, not the body
  2. Read the images. This is the one that gets skipped
  3. Know which post each image belongs to, and what it is answering
  4. Only then reason about the cause

What it can do on your machine

Read from SKILL.md and the folder at commit 335b258. 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

    Shell commands in SKILL.md call:

    • gh
    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • github.com
    • user-images.githubusercontent.com

    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

Investigating Bug Reports loads about 1.7k tokens when it runs. Until then it costs about 60 tokens; SKILL.md has 915 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~60
When it runs · the whole SKILL.md, loaded when a task matches
~1.7k

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from parawanderer/OpenTagViewer at commit 335b258, republished under its MIT licence (© parawanderer). 915 words, ~1,687 tokens.

Download SKILL.mdSave it as .claude/skills/investigating-bug-reports/SKILL.md (or your agent's skills folder).
name
investigating-bug-reports
description
Read a GitHub bug report completely - every comment and every image - before diagnosing or asking the reporter for more. Use whenever triaging an issue here, answering a reporter, or deciding a report lacks detail.

Reading a bug report before answering it

The failure this exists for is concluding "there is not enough here" while the answer is in the thread. It is not a slower diagnosis; it is asking somebody to send a thing they already sent, then reasoning from a guess while waiting for it.

Two things get missed, and both are invisible in the obvious gh call.

1. Pull the whole thread, not the body

gh issue view <n> prints the body. The diagnosis is often three comments down — a reporter who answered a question, a second person with the same symptom on different hardware, or the reporter correcting their own title.

bash
gh issue view <n> --json number,title,author,createdAt,state,labels,body,comments \
  --jq '"#\(.number) \(.title)\nby \(.author.login) at \(.createdAt)  [\(.state)]\n\n\(.body)\n\n--- COMMENTS ---\n"
        + ([.comments[] | "[\(.author.login) \(.createdAt)]\n\(.body)"] | join("\n\n"))'

gh issue view <n> --comments has come back empty here on an issue that has comments, which is why the --json form is the one written down. A blank result from the convenience flag is not evidence the thread is empty — check with the JSON before believing it.

2. Read the images. This is the one that gets skipped

This is a phone app, so its errors arrive on a screen, so that is how they get reported. The template's log field and "what happened" field are routinely empty while a screenshot carries the whole thing — pasting a screenshot is one gesture, capturing a log is a menu, a file and a decision about what to redact.

gh gives you the URL, not the picture, and an <img> tag sitting in a body reads like decoration next to prose. A report whose fields are blank is not a report with nothing in it. It is one where everything is in the attachment.

Then download each one and Read it. The Read tool renders an image, but only from a local path — there is no fetching an image straight from a URL:

bash
curl -sL -o "$SCRATCH/shot1.png" "https://github.com/user-attachments/assets/<id>"
file "$SCRATCH/shot1.png"    # confirm it is a PNG and not an HTML error page

Older reports use https://user-images.githubusercontent.com/... instead; same treatment.

A private repository's attachments need auth — gh api with the URL, or a cookie. This repository is public, so plain curl -sL is enough, and file saying PNG image data is the check that it worked.

3. Know which post each image belongs to, and what it is answering

A bare list of URLs strips the context that makes a screenshot mean anything. Three images in a thread are usually not three views of one bug: one is the original symptom, one is a reporter answering "what does Settings say", and one is somebody else's different problem. Read as an undifferentiated pile, they contradict each other, and the contradiction looks like an unreproducible bug.

So attribute each one before opening it — who posted it, in which post, and what they were saying when they attached it. This prints exactly that, with the text leading up to each image:

bash
gh issue view <n> --json body,comments,author,createdAt --jq '
  ([{who: .author.login, where: "body", text: .body}]
   + [.comments[] | {who: .author.login, where: "comment", text: .body}])
  | to_entries[] | .key as $i | .value as $p
  | ($p.text | [scan("https://github.com/user-attachments/assets/[A-Za-z0-9-]+")])
  | select(length > 0) | .[] | . as $url
  | ($p.text | split($url) | .[0] | .[-220:] | gsub("\n"; " ⏎ ")) as $before
  | "=== \($p.where)#\($i) by \($p.who)\n\($url)\ncontext before: …\($before)\n"'

Then carry that label with the image when you reason about it: "the screenshot in the body, under 'What happened — tried to login using another account separated from my main account'" — not "the screenshot". The label is what tells you the account in the picture is a secondary account, which on #221 was half the diagnosis.

Show full SKILL.md (403 more words)Show less

4. Only then reason about the cause

Not before. With every post read and every image seen, ask what the evidence supports — and let it overrule the title, the label, and whatever the code's own error message asserts.

On #221 all three were wrong in the same direction. The app classified the failure as terms of service and said so on screen; the screenshot showed localizedError absent and the delegate's own status=1 present, which is a different channel of the same response and not terms at all. The error message a program prints is a hypothesis its author wrote in advance, not evidence. Evidence is what the server actually returned.

Then say which parts are established and which are inference, the same way rule 2 asks. "Apple returned this string; the neighbours diagnose that string as X; I have not reproduced it" is a useful answer. "It is X" is not, when it is not.

Only then decide whether detail is missing

Say what the screenshot showed. If something genuinely is absent, ask for that one thing, and do not ask for anything the thread already contains.

Quote the error text, never the surrounding screen, and never re-upload the image. Reporters redact unevenly: one here blacked out a phone number by hand and left the pixels either side of it untouched. A screenshot is personal data that happens to contain a stack trace.

Worth doing at the same time

  • Check the neighbours (AGENTS.md rule 18). This project shares its authentication path with AltStore, SideStore, Macless Haystack and OpenBubbles, and the same Apple-side message is usually already diagnosed on one of their trackers.
  • Check the fork (rule 19): gh pr list --repo parawanderer/FindMy.py.
  • Ask whether it is already reported: gh issue list --state all --limit 100.

Where this came from

#221. The log field was empty and a reply was drafted asking the reporter to capture one. The attached screenshot already held the complete error — the exception type, status=1, and the status-message Apple sent — and that string named a cause that was neither of the two being guessed at. Nothing was missing from the report except somebody looking at it.

  • AGENTS.md rule 20 — the short version of this, for agents who never load a skill.
  • AGENTS.md rule 17 — how to write the reply once you know the answer. The register in AGENTS.md is for agents; a reporter gets the finding and the remedy.

© parawanderer, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/investigating-bug-reports of parawanderer/OpenTagViewer.

Open the folder on GitHubat commit 335b258

Compare with similar skills

Investigating Bug Reports 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.

Investigating Bug Reports compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Investigating Bug Reports this skillparawanderer/OpenTagViewer420—~1.7kAutomated safety check: PassMIT
Weavebench Cua ReproduceAMAP-ML/LongHorizon-Harness1.7k—~1.6kAutomated safety check: PassMIT
Evidence-Driven Testingmichaelshimeles/skills1.3k1 repos~3.9kAutomated safety check: PassNone
Create GitHub IssueNVIDIA/OpenShell16k—~1.7kAutomated safety check: PassApache-2.0
Triage IssuesClickHouse/clickhouse-java1.6k—~904Automated safety check: PassApache-2.0
Gentle AI Issue CreationGentleman-Programming/gentle-shell1.3k—~2.5kAutomated safety check: PassApache-2.0

Similar skills

  • Weavebench Cua Reproduce

    AMAP-ML/LongHorizon-Harness

    Reproduce CUA-Harness experiments on WeaveBench from a GitHub checkout.

    1.7k GitHub stars~1.6k tokensUpdated 1 mo ago
    Testing & QAAuto-check passed
  • Evidence-Driven Testing

    michaelshimeles/skills

    Records an annotated screen recording of the agent testing an app hands-on, then posts the video and a results summary to the PR and tracker issue.

    1.3k GitHub starsUsed in 1 repo~3.9k tokens
    Testing & QAAuto-check passed
  • Create GitHub Issue

    NVIDIA/OpenShell

    Official

    Create GitHub issues using the gh CLI. An agent skill from NVIDIA/OpenShell.

    16k GitHub stars~1.7k tokensUpdated today
    Testing & QAAuto-check passed
  • Triage Issues

    ClickHouse/clickhouse-java

    Analyzes a single GitHub issue at a time. An agent skill from ClickHouse/clickhouse-java.

    1.6k GitHub stars~904 tokensUpdated yesterday
    Testing & QAAuto-check passed
  • Gentle AI Issue Creation

    Gentleman-Programming/gentle-shell

    Create and triage GitHub issues from repository evidence. An agent skill from Gentleman-Programming/gentle-shell.

    1.3k GitHub stars~2.5k tokensUpdated today
    Testing & QAAuto-check passed
  • Termio Bug Report

    termio-sh/termio

    Diagnose a termio hang, beachball, crash, or 'it froze again' from the evidence macOS and termio actually leave behind — live process samples, crash and CPU-burn reports, the unified log, the…

    539 GitHub stars~1.9k tokensUpdated yesterday
    Testing & QAAuto-check passed

More from parawanderer/OpenTagViewer

  • Add Strings

    parawanderer/OpenTagViewer

    Add or back-fill user-facing Android strings across all locales in OpenTagViewer.

    420 GitHub stars~1.2k tokensUpdated 21 days ago
    Auto-check passed
  • Device Screenshots

    parawanderer/OpenTagViewer

    Render app UI on the Gradle managed device and look at the result without spending a fortune in vision tokens.

    420 GitHub stars~1.4k tokensUpdated 21 days ago
    Auto-check passed
  • Watch Gradle Tests

    parawanderer/OpenTagViewer

    Watch a Gradle instrumented-test run to a verdict without hand-writing greps.

    420 GitHub stars~1.4k tokensUpdated 21 days ago
    Auto-check passed
  • Watch PR

    parawanderer/OpenTagViewer

    Watch a pushed PR's checks with the Monitor tool, and act on the verdict.

    420 GitHub stars~1.9k tokensUpdated 21 days ago
    Auto-check passed

Works with

Categories

Questions about Investigating Bug Reports

What does Investigating Bug Reports do?

Read a GitHub bug report completely - every comment and every image - before diagnosing or asking the reporter for more. Investigating Bug Reports is an agent skill from parawanderer/OpenTagViewer. Read a GitHub bug report completely - every comment and every image - before diagnosing or asking the reporter for more.

When should I use Investigating Bug Reports?

Investigating Bug Reports fits situations like: triaging an issue here; answering a reporter; deciding a report lacks detail.

How do I install Investigating Bug Reports in Claude Code?

Run `npx skills add parawanderer/OpenTagViewer --skill investigating-bug-reports -a claude-code`. Or copy the skill folder (.claude/skills/investigating-bug-reports in parawanderer/OpenTagViewer) into .claude/skills/investigating-bug-reports in your project. Claude Code loads it when a task matches its description.

How do I install Investigating Bug Reports in Codex?

Run `npx skills add parawanderer/OpenTagViewer --skill investigating-bug-reports -a codex`. Or copy the skill folder (.claude/skills/investigating-bug-reports in parawanderer/OpenTagViewer) into .agents/skills/investigating-bug-reports in your project. Codex loads it when a task matches its description.

Can I use Investigating Bug Reports 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 parawanderer/OpenTagViewer --skill investigating-bug-reports -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/investigating-bug-reports, .gemini/skills/investigating-bug-reports, .github/skills/investigating-bug-reports and .opencode/skills/investigating-bug-reports in your project.

What does Investigating Bug Reports need to run?

Going by SKILL.md and its folder, Investigating Bug Reports needs the command-line tools its instructions call (gh and curl).

Does Investigating Bug Reports access the network?

SKILL.md names 2 domains. In commands or code: github.com and user-images.githubusercontent.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Investigating Bug Reports 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. Review the folder before installing.

What licence does Investigating Bug Reports use?

Investigating Bug Reports 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 Investigating Bug Reports use?

About 1.7k tokens (SKILL.md is roughly 6.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Investigating Bug Reports?

Skills that share tags, products or a category with Investigating Bug Reports: Weavebench Cua Reproduce (AMAP-ML/LongHorizon-Harness, 1.7k stars), Evidence-Driven Testing (michaelshimeles/skills, 1.3k stars), Create GitHub Issue (NVIDIA/OpenShell, 16k stars) and Triage Issues (ClickHouse/clickhouse-java, 1.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Investigating Bug Reports?

parawanderer (a GitHub user) maintains it in parawanderer/OpenTagViewer, which has 420 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on September 19, 2026.

Source: parawanderer/OpenTagViewer on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.