Agent skill

Acp Issue Diagnose

by jrhubott in jrhubott/adaptive-cover-pro

Triage an Adaptive Cover Pro GitHub issue end-to-end — fetch the attached diagnostics file (or take a local path), run a Sonnet-powered diagnosis, and draft a reply ready to post on the issue.

MITAuto-check passedDevelopment

Install Acp Issue Diagnose

skills CLI
$ npx skills add jrhubott/adaptive-cover-pro --skill acp-issue-diagnose -a claude-code

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

GitHub CLI
$ gh skill install jrhubott/adaptive-cover-pro acp-issue-diagnose --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/jrhubott/adaptive-cover-pro.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/acp-issue-diagnose .claude/skills/acp-issue-diagnose && 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
acp-issue-diagnose
GitHub stars
176
Token cost
~2.8k tokens
SKILL.md length
713 words
Files
1
Skills in repo
4
Repo updated
First seen
Licence
MIT

At a glance

Triage an Adaptive Cover Pro GitHub issue end-to-end — fetch the attached diagnostics file (or take a local path), run a Sonnet-powered diagnosis, and draft a reply ready to post on the issue.

  • Works in 4 steps: Acquire the Diagnostics File → Diagnose with Sonnet → Draft the Reply → …
  • The user says triage issue NNN
  • SKILL.md covers Pick the Input Mode, Step 1 — Acquire the…, Step 2 — Diagnose with Sonnet and Step 3 — Draft the Reply, plus 4 more sections
  • Calls gh, curl and python3; reaches github.com

What it does

Acp Issue Diagnose is an agent skill from jrhubott/adaptive-cover-pro. Triage an Adaptive Cover Pro GitHub issue end-to-end — fetch the attached diagnostics file (or take a local path), run a Sonnet-powered diagnosis, and draft a reply ready to post on the issue. Use when the user says "triage issue NNN", "look at issue NNN", "diagnose issue NNN", "draft a response to issue NNN", or hands over a local diagnostics file with "draft an issue reply".

Its SKILL.md is about 2.8k 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 Development, covering Issue triage. It works with GitHub and Home Assistant. The repository describes itself as: Adaptive sun-tracking cover control for Home Assistant: blinds, awnings, and venetian tilts with climate-aware positioning and a priority override pipeline. The licence is MIT.

When your agent uses it

  • The user says triage issue NNN
  • Look at issue NNN
  • Diagnose issue NNN
  • Draft a response to issue NNN

Example prompts

  • “triage issue NNN”
  • “look at issue NNN”
  • “diagnose issue NNN”
  • “/acp-issue-diagnose”

Requirements

  • Python 3

Workflow steps

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

  1. Acquire the Diagnostics File
  2. Diagnose with Sonnet
  3. Draft the Reply
  4. Show, Confirm, Optionally Post

What it can do on your machine

Read from SKILL.md and the folder at commit c03d682. 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
    • python3
    • python

    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

    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

Acp Issue Diagnose loads about 2.8k tokens when it runs. Until then it costs about 100 tokens; SKILL.md has 713 words of instructions outside code blocks.

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

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 jrhubott/adaptive-cover-pro at commit c03d682, republished under its MIT licence (© jrhubott). 713 words, ~2,762 tokens.

Download SKILL.mdSave it as .claude/skills/acp-issue-diagnose/SKILL.md (or your agent's skills folder).
name
acp-issue-diagnose
description
Triage an Adaptive Cover Pro GitHub issue end-to-end — fetch the attached diagnostics file (or take a local path), run a Sonnet-powered diagnosis, and draft a reply ready to post on the issue. Use when the user says "triage issue NNN", "look at issue NNN", "diagnose issue NNN", "draft a response to issue NNN", or hands over a local diagnostics file with "draft an issue reply".

ACP Issue Diagnose

End-to-end triage workflow for adaptive-cover-pro GitHub issues that include a diagnostics dump. This skill fetches, diagnoses (Sonnet), and drafts a reply. Posting the reply is gated behind explicit user confirmation.

For one-off analysis of a JSON file with no GitHub-issue context, use the simpler acp-diagnose skill instead.


Pick the Input Mode

User says…Mode
"issue 285", "#285", a GitHub issue URLissue mode — fetch from GitHub
A path like /tmp/foo.json, "this file", or a paste of JSONlocal mode — skip the fetch step

If the user says only "diagnose this" with no number, file, or attachment, ask: "Issue number (e.g. 285) or path to a diagnostics file?"


Step 1 — Acquire the Diagnostics File

Issue mode
bash
gh issue view <N> --json number,title,body,author,state,labels,createdAt,comments

Parse the body for attachment URLs. Home Assistant's diagnostics download is a JSON file; users sometimes rename it to .log. Match this regex on the body:

https://github\.com/user-attachments/files/\d+/[^\s\)]+\.(?:json|log|txt)
  • Zero matches → check the comments array for the same regex; users sometimes attach in a follow-up.
  • Still zero → draft a reply that asks for diagnostics (template in Output Format → Missing-data reply) and stop.
  • Multiple matches → use the latest one (last in the body, then last in comments). Note the others in the report so the user can re-run against an earlier file if needed.

Download to /tmp/:

bash
URL="<attachment-url>"
OUT="/tmp/acp-issue-<N>-$(basename "$URL")"
gh api "$URL" > "$OUT"     # gh handles auth; works for private repos too

If gh api fails (occasionally happens for the user-attachments host), fall back to:

bash
curl -sSL -H "Authorization: Bearer $(gh auth token)" "$URL" -o "$OUT"

Verify it parsed:

bash
python3 -c "import json; json.load(open('$OUT'))" && echo OK

If parse fails, the file is likely an HTML error page (auth/redirect). Show the first 200 bytes to the user and stop.

Local mode

Take the path verbatim. If it's a paste, write it to /tmp/acp-diag-paste.json first, then validate parse.


Step 2 — Diagnose with Sonnet

Dispatch one subagent with the Sonnet model. Do not run the analysis in the main thread — the diagnostics file is large and the structured walkthrough is exactly what a delegated subagent is for.

Agent(
  description: "Sonnet diagnosis of ACP diagnostics",
  subagent_type: "general-purpose",
  model: "sonnet",
  prompt: <see template below>
)
Subagent prompt template
You are diagnosing an Adaptive Cover Pro diagnostics dump for a GitHub issue.

Diagnostics file: <ABSOLUTE_PATH>
Issue context (may be empty for local-mode runs):
  Number: <N or "n/a">
  Title:  <title or "n/a">
  Reporter: <login or "n/a">
  ACP version reported in body: <version or "n/a">
  HA version reported in body:  <version or "n/a">
  Cover type reported in body:  <type or "n/a">
  Reporter's description (verbatim, may be truncated):
  ---
  <first ~1500 chars of issue body, describe + reproduction sections preferred>
  ---

Your job:
1. Run the triage engine over the diagnostics file (from the repo root, with the
   dev virtualenv — the package import pulls Home Assistant):

     venv/bin/python scripts/triage_json.py <ABSOLUTE_PATH> [--latest-version <X.Y.Z>]

   That runs the SAME declarative rule table as the in-product Troubleshoot step and
   prints one line per finding plus a wiki deep link. Do NOT re-implement the checks
   by hand — the engine owns them. Pass --latest-version when the issue names the
   newest release so the STALE_VERSION check can fire.
2. Read the diagnostics file (Read tool, or Bash+Python `json.load` for large files)
   to investigate anything the engine did NOT flag. Remember the offline seam: the
   download lacks per-entity capabilities and axis requirements, so rules 8a
   (COVER_NOT_READY) and 13 (COVER_FEATURE_MISMATCH) cannot fire offline — check a
   suspected capability mismatch by hand. An unexplained symptom is a missing rule
   row: note it so the maintainer can add one (see the Developer-Triage-Rules wiki).
3. Cross-reference the reporter's described symptom against the diagnostics:
   - Does the diagnostics state corroborate the symptom? (e.g. "covers don't move" + `gave_up=true`)
   - Or contradict it? (e.g. "manual override stuck" + `manual_override_state.entries == []`)
   - Or is the symptom outside what diagnostics can show? (e.g. a UI rendering bug)
4. Identify the most likely root cause(s), ranked.
5. Note any missing information you'd need to confirm — specific entity states, HA logs around a timestamp, repro steps, etc.

Output a single JSON object with this shape — no commentary, no markdown fences:

{
  "header": {
    "integration_version": "...",
    "cover_type": "...",
    "last_update_success": true,
    "last_update_time": "..."
  },
  "critical": ["..."],            // empty array if none
  "warnings": ["..."],
  "findings": ["..."],            // bullet-form, plain English
  "decision_trace_summary": "Winning handler: X (position: Y%, reason: ...)",
  "symptom_vs_diagnostics": "corroborated" | "contradicted" | "orthogonal" | "insufficient",
  "symptom_analysis": "1-3 sentences: how the diagnostics relate to what the reporter described",
  "root_cause_ranked": [
    {"hypothesis": "...", "confidence": "high|medium|low", "evidence": "..."}
  ],
  "info_needed": ["..."],         // empty array if you have enough
  "config_suggestions": ["..."],  // concrete option changes if applicable
  "summary": "1-2 sentences for the issue reply"
}

Keep total output under ~3KB. Be specific — cite handler names, option names, entity IDs.

When the subagent returns, parse its JSON. If parsing fails, show the user what came back and ask whether to retry; do not silently fix.


Step 3 — Draft the Reply

Use the structured output from Step 2 to assemble a markdown comment. Voice: first-person ("I"), matching the maintainer's tone in the existing repo. Tone: direct, technical, friendly. No filler ("Thanks for reporting!"), no emoji unless flagging a critical issue with a single 🔴.

Reply template
markdown
Looked at the diagnostics — running ACP {version}, cover type `{cover_type}`, last update {ok/FAILED} at {time}.

**What I see:**
{2–4 bullets of the most relevant findings — pull from `findings` and `decision_trace_summary`. Lead with anything in `critical`.}

**Most likely cause:**
{`root_cause_ranked[0].hypothesis` with one-sentence evidence. If confidence is low, hedge ("might be"). If multiple hypotheses are roughly tied, list the top two.}

**Suggested next step:**
{Pull from `config_suggestions` if any. Otherwise: what to try, or what info you need.}

{If `info_needed` is non-empty, add:}
**To confirm, could you share:**

- {bullet per item}
Critical-finding override

If critical is non-empty, lead with a single line:

🔴 The diagnostics show {first critical item}.

…then the rest of the template.

Missing-data reply (no diagnostics found)
markdown
I don't see a diagnostics dump on this issue yet — could you attach one?

In Home Assistant: Settings → Devices & Services → Adaptive Cover Pro → ⋮ (the row's overflow menu) → Download diagnostics. Drop the resulting `.json` file into a comment here.

If you can also include:

- A rough timestamp of when the misbehavior happened (so I can correlate against the diagnostics)
- The relevant `cover.*` entity ID

…that'd let me get to a root cause faster.

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

Step 4 — Show, Confirm, Optionally Post

Always show the drafted reply to the user first. Then ask one question:

Post this comment on issue #N, edit it first, or leave it as-is for me to post manually?

Only if the user explicitly says "post it" / "yes, post" do you run:

bash
gh issue comment <N> --body "$(cat <<'EOF'
<reply markdown>
EOF
)"

⚠️ Posting to GitHub is shared state. Never post without explicit confirmation in the current turn. A prior approval for a different issue does not carry over.

Do not add labels, close the issue, or assign. Those are maintainer judgments outside this skill's scope.


Output Format (skill-final report to user)

After Step 3 (drafted but not posted), report:

ACP issue triage — #<N> "<title>" by @<author>

Diagnostics: <path or attachment URL>
ACP <version> · <cover_type> · last update <ok|FAILED>

Verdict: <one-sentence summary from Sonnet>
Confidence: <high|medium|low — from root_cause_ranked[0]>

--- DRAFT REPLY ---
<full markdown reply>
--- END DRAFT ---

Post this on #<N>, edit, or leave for manual posting?

For local-mode runs (no issue number), drop the #N lines and end with:

No issue number provided — copy the draft above into your reply manually, or give me an issue number to post it to.

Safety Rules

  • No automatic posting. Always wait for explicit confirmation in the same turn.
  • No label/state changes. This skill comments only.
  • Never delete the downloaded diagnostics file during the session — the user may want to re-run.
  • If the diagnostics file is corrupt or HTML, stop and surface the raw content excerpt; do not fabricate findings.
  • If the reporter's symptom contradicts the diagnostics (symptom_vs_diagnostics == "contradicted"), say so plainly in the reply rather than papering over it. The contradiction is itself a useful finding.
  • Cost budget: one Sonnet diagnosis per issue. If the user re-runs after editing the prompt, that's fine; do not auto-loop.

Notes for Future Maintenance

  • The Sonnet subagent runs scripts/triage_json.py — the SAME rule engine as the in-product Troubleshoot step. New checks are added as rule rows in diagnostics/triage.py (see the Developer-Triage-Rules wiki), never as prose in a skill file, so both this skill and the offline acp-diagnose skill pick them up automatically.
  • If GitHub changes the user-attachments URL format, update the regex in Step 1. The current pattern is https://github.com/user-attachments/files/<id>/<filename>.
  • HA's diagnostics download produces filenames like config_entry-adaptive_cover_pro-<ULID>.json. Some reporters rename to .log — that's why the regex accepts .json|.log|.txt.

© jrhubott, 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/acp-issue-diagnose of jrhubott/adaptive-cover-pro.

Open the folder on GitHubat commit c03d682

Compare with similar skills

Acp Issue Diagnose 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.

Acp Issue Diagnose compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Acp Issue Diagnose this skilljrhubott/adaptive-cover-pro176—~2.8kAutomated safety check: PassMIT
Setup Matt Pocock Skillsbestofjs/bestofjs3.1k20 repos~1.7kAutomated safety check: PassMIT
Windows App SDK Issue Triage Reportmicrosoft/WindowsAppSDK4.7k—~3.4kAutomated safety check: PassApache-2.0
Exposed Bug Fix WorkflowJetBrains/Exposed9.3k—~3.8kAutomated safety check: PassApache-2.0
Pre-Release PR Triagejamiepine/voicebox57k—~3.1kAutomated safety check: PassMIT
WinAppSDK Triage Meeting Prepmicrosoft/WindowsAppSDK4.7k—~2.8kAutomated safety check: PassApache-2.0

Similar skills

  • Setup Matt Pocock Skills

    bestofjs/bestofjs

    Configure this repo for the engineering skills — set up its issue tracker, triage label vocabulary, and domain doc layout.

    3.1k GitHub starsUsed in 20 repos~1.7k tokens
    DevelopmentAuto-check passed
  • Official

    Generates GitHub Feature Area Status reports for the Windows App SDK repository, scoring issues so teams can see what needs attention in each area.

    4.7k GitHub stars~3.4k tokensUpdated today
    DevelopmentAuto-check passed
  • Exposed Bug Fix Workflow

    JetBrains/Exposed

    Official

    Takes a GitHub or YouTrack issue for the Exposed project through reproduction, a failing test, a fix, validation and a pull request.

    9.3k GitHub stars~3.8k tokensUpdated today
    DevelopmentAuto-check passed
  • Pre-Release PR Triage

    jamiepine/voicebox

    Sorts a backlog of open pull requests into must-merge, candidate, superseded and deferred, writes a triage doc and works the merge loop before a release.

    57k GitHub stars~3.1k tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • WinAppSDK Triage Meeting Prep

    microsoft/WindowsAppSDK

    Official

    Prepares the triage meeting summary for WinAppSDK Needs-Triage issues, with research-backed area suggestions, draft replies and a diff since the last triage.

    4.7k GitHub stars~2.8k tokensUpdated today
    DevelopmentAuto-check passed
  • A2ui Issue Triage

    a2ui-project/a2ui

    Automates the triage of GitHub issues in the A2UI repository.

    17k GitHub stars~1.5k tokensUpdated today
    DevelopmentAuto-check passed

More from jrhubott/adaptive-cover-pro

  • Acp Diagnose

    jrhubott/adaptive-cover-pro

    Analyze an Adaptive Cover Pro diagnostics JSON file and produce a triage report.

    176 GitHub stars~958 tokensUpdated today
    Auto-check passed
  • Acp Live Diagnose

    jrhubott/adaptive-cover-pro

    Root-cause a misbehaving Adaptive Cover Pro cover on a RUNNING Home Assistant install by pulling live diagnostics over the HA MCP, correlating against the recorder, proving the mechanism with a…

    176 GitHub stars~3.8k tokensUpdated today
    Auto-check passed
  • Acp Translate

    jrhubott/adaptive-cover-pro

    Sync DE/FR translations with en.json, add a new language, drop a language, or check translation status for the Adaptive Cover Pro integration.

    176 GitHub stars~5.8k tokensUpdated today
    Auto-check passed

Categories

Questions about Acp Issue Diagnose

What does Acp Issue Diagnose do?

Triage an Adaptive Cover Pro GitHub issue end-to-end — fetch the attached diagnostics file (or take a local path), run a Sonnet-powered diagnosis, and draft a reply ready to post on the issue. Acp Issue Diagnose is an agent skill from jrhubott/adaptive-cover-pro. Triage an Adaptive Cover Pro GitHub issue end-to-end — fetch the attached diagnostics file (or take a local path), run a Sonnet-powered diagnosis, and draft a reply ready to post on the issue.

When should I use Acp Issue Diagnose?

Acp Issue Diagnose fits situations like: the user says triage issue NNN; look at issue NNN; diagnose issue NNN; draft a response to issue NNN.

How do I install Acp Issue Diagnose in Claude Code?

Run `npx skills add jrhubott/adaptive-cover-pro --skill acp-issue-diagnose -a claude-code`. Or copy the skill folder (.claude/skills/acp-issue-diagnose in jrhubott/adaptive-cover-pro) into .claude/skills/acp-issue-diagnose in your project. Claude Code loads it when a task matches its description.

How do I install Acp Issue Diagnose in Codex?

Run `npx skills add jrhubott/adaptive-cover-pro --skill acp-issue-diagnose -a codex`. Or copy the skill folder (.claude/skills/acp-issue-diagnose in jrhubott/adaptive-cover-pro) into .agents/skills/acp-issue-diagnose in your project. Codex loads it when a task matches its description.

Can I use Acp Issue Diagnose 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 jrhubott/adaptive-cover-pro --skill acp-issue-diagnose -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/acp-issue-diagnose, .gemini/skills/acp-issue-diagnose, .github/skills/acp-issue-diagnose and .opencode/skills/acp-issue-diagnose in your project.

What does Acp Issue Diagnose need to run?

Going by SKILL.md and its folder, Acp Issue Diagnose needs the command-line tools its instructions call (gh, curl, python3 and python). Our summary lists: Python 3.

Does Acp Issue Diagnose access the network?

SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Acp Issue Diagnose 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 Acp Issue Diagnose use?

Acp Issue Diagnose 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 Acp Issue Diagnose use?

About 2.8k tokens (SKILL.md is roughly 11k 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 Acp Issue Diagnose?

Skills that share tags, products or a category with Acp Issue Diagnose: Setup Matt Pocock Skills (bestofjs/bestofjs, 3.1k stars), Windows App SDK Issue Triage Report (microsoft/WindowsAppSDK, 4.7k stars), Exposed Bug Fix Workflow (JetBrains/Exposed, 9.3k stars) and Pre-Release PR Triage (jamiepine/voicebox, 57k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Acp Issue Diagnose?

jrhubott (a GitHub user) maintains it in jrhubott/adaptive-cover-pro, which has 176 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 9, 2026.

Source: jrhubott/adaptive-cover-pro on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.