The Art of Debugging
stas00/the-art-of-debugging
Condensed debugging method and tool recipes for Unix, Python and PyTorch programs: crashes, hangs, segfaults, wrong output, CUDA OOM, NaN values and slowness.
Finds the first failing layer when an OpenLogi Logitech device is missing or misbehaving across enumeration, open, probe, IPC and UI.
$ npx skills add AprilNEA/OpenLogi --skill diagnosing-openlogi-devices -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install AprilNEA/OpenLogi diagnosing-openlogi-devices --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/AprilNEA/OpenLogi.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/diagnosing-openlogi-devices .claude/skills/diagnosing-openlogi-devices && rm -rf skills-srcUse ~/.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/
Install the "diagnosing-openlogi-devices" agent skill from https://github.com/AprilNEA/OpenLogi/tree/master/.agents/skills/diagnosing-openlogi-devices into .claude/skills/diagnosing-openlogi-devices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diagnosing-openlogi-devices", 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.
$skill-installer install https://github.com/AprilNEA/OpenLogi/tree/master/.agents/skills/diagnosing-openlogi-devicesType 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.
$ npx skills add AprilNEA/OpenLogi --skill diagnosing-openlogi-devices -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install AprilNEA/OpenLogi diagnosing-openlogi-devices --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AprilNEA/OpenLogi.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/diagnosing-openlogi-devices .agents/skills/diagnosing-openlogi-devices && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "diagnosing-openlogi-devices" agent skill from https://github.com/AprilNEA/OpenLogi/tree/master/.agents/skills/diagnosing-openlogi-devices into .agents/skills/diagnosing-openlogi-devices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diagnosing-openlogi-devices", 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.
$ npx skills add AprilNEA/OpenLogi --skill diagnosing-openlogi-devices -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install AprilNEA/OpenLogi diagnosing-openlogi-devices --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AprilNEA/OpenLogi.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/diagnosing-openlogi-devices .cursor/skills/diagnosing-openlogi-devices && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "diagnosing-openlogi-devices" agent skill from https://github.com/AprilNEA/OpenLogi/tree/master/.agents/skills/diagnosing-openlogi-devices into .cursor/skills/diagnosing-openlogi-devices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diagnosing-openlogi-devices", 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.
$ gemini skills install https://github.com/AprilNEA/OpenLogi.git --path .agents/skills/diagnosing-openlogi-devices--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add AprilNEA/OpenLogi --skill diagnosing-openlogi-devices -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install AprilNEA/OpenLogi diagnosing-openlogi-devices --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AprilNEA/OpenLogi.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/diagnosing-openlogi-devices .gemini/skills/diagnosing-openlogi-devices && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "diagnosing-openlogi-devices" agent skill from https://github.com/AprilNEA/OpenLogi/tree/master/.agents/skills/diagnosing-openlogi-devices into .gemini/skills/diagnosing-openlogi-devices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diagnosing-openlogi-devices", 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.
$ gh skill install AprilNEA/OpenLogi diagnosing-openlogi-devicesInstalls 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).
$ npx skills add AprilNEA/OpenLogi --skill diagnosing-openlogi-devices -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/AprilNEA/OpenLogi.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/diagnosing-openlogi-devices .github/skills/diagnosing-openlogi-devices && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "diagnosing-openlogi-devices" agent skill from https://github.com/AprilNEA/OpenLogi/tree/master/.agents/skills/diagnosing-openlogi-devices into .github/skills/diagnosing-openlogi-devices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diagnosing-openlogi-devices", 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.
$ npx skills add AprilNEA/OpenLogi --skill diagnosing-openlogi-devices -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install AprilNEA/OpenLogi diagnosing-openlogi-devices --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AprilNEA/OpenLogi.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/diagnosing-openlogi-devices .opencode/skills/diagnosing-openlogi-devices && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "diagnosing-openlogi-devices" agent skill from https://github.com/AprilNEA/OpenLogi/tree/master/.agents/skills/diagnosing-openlogi-devices into .opencode/skills/diagnosing-openlogi-devices/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "diagnosing-openlogi-devices", 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.
diagnosing-openlogi-devicesFinds the first failing layer when an OpenLogi Logitech device is missing or misbehaving across enumeration, open, probe, IPC and UI.
This skill walks an agent through locating the first failing layer when an OpenLogi device misbehaves, before any permission change or code fix is proposed. OpenLogi is a local Logitech device manager written in Rust that talks to devices over HID++. The agent first records versions, OS, install source, active profile, device model and connection type (Bolt, Unifying, Bluetooth-direct or wired), and separates a missing receiver from a paired device that is asleep or offline.
It then compares openlogi list output, both stdout and stderr, with the GUI under the same profile, reads the failing agent's logs and raises detail with OPENLOGI_LOG=debug when needed. A table maps evidence to the next area to inspect: no HID interfaces points at connection and enumeration filters, an interface that opens but fails a probe points at HID++ requests and transport, and a device the agent sees but the GUI does not points at IPC and capability filtering. macOS cases defer to a separate permission skill, while Linux cases inspect hidraw, input/event and uinput permissions, and installing rules, changing ACLs, resetting permissions or stopping another app are actions to hold back.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 0f69d75. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
OpenLogi Device Diagnosis loads about 1.6k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 709 words of instructions outside code blocks.
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.
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.
The full file from AprilNEA/OpenLogi at commit 0f69d75, republished under its Apache-2.0 licence (© AprilNEA). 709 words, ~1,577 tokens.
.claude/skills/diagnosing-openlogi-devices/SKILL.md (or your agent's skills folder).Find the first failing layer before proposing a permission change or code fix.
openlogi list stdout and stderr with the GUI, using the same profile.
Read list provenance if ambiguous:inventory read from the running agent uses the GUI's HID inventory source.OPENLOGI_LOG=debug
with the correct launch path. A new foreground process can change permission
attribution. Missing debug lines in an info-level log prove nothing.| Evidence | Investigate next |
|---|---|
| No matching HID interfaces | Connection, model identity, transport, registry/enumeration filters |
| Interface found, open fails | Permission status of the opener, exclusive ownership, host transport |
| Channel opens, feature probe times out or fails | HID++ request/response and transport; do not reset permissions by default |
| Direct CLI works, agent inventory fails | Compare process identity, versions, profiles, and agent logs |
| Compatible agent snapshot has the device, GUI does not | IPC delivery, desktop state, capability filtering, presentation |
| Device appears, one feature fails | Reported feature ID/version, capability gating, then the owning operation |
For macOS symptoms, load the existing
permission skill.
Use its identity map and read-only diagnosis; do not duplicate TCC procedures.
For Linux access failures, inspect the relevant hidraw, input/event, and
uinput permissions using Linux access guidance.
Do not install rules, change ACLs, reset permissions, or stop another app without
authorization. Do not diagnose a Windows failure from a macOS permission model.
Read the diagnostic command definitions and the selected subcommand before running it. Explain direct hardware access and coordinate with competing clients. Do not present enumeration as a zero-write session: receiver discovery can enable notifications and request arrival reports.
| Diagnostic | Boundary |
|---|---|
openlogi diag features | Reads feature/firmware tables for all online devices; has no --device flag |
diag controls, diag battery | Read the selected device; use --device and inspect the printed route |
diag wheel without --resolution | Reads wheel mode; adding --resolution writes hardware |
diag dpi | Writes a test DPI and attempts restoration; failures can prevent restoration |
diag smartshift without --sensitivity or --leave-flipped | Toggles mode and attempts restoration; failures can prevent restoration |
diag smartshift --sensitivity N | Sets sensitivity without restoring the previous value; preserves the current mode |
diag smartshift --leave-flipped | Toggles mode and intentionally skips restoration |
diag lighting | Writes lighting; not an observation-only diagnostic |
Diagnostic --device uses the first case-insensitive substring match. If names
overlap, do not treat it as unique selection. Resolve the target before writes.
Get authorization for setting writes or pairing/unpairing; do not run them as
default triage. Stop if ownership, target selection, or restoration is uncertain.
Use change verification for the before/after test requirements. Start with an existing test seam:
Keep node presence, channel connectivity, paired-slot state, and published inventory distinct. Assert intermediate cleanup and replacement, not only the final online state.
© AprilNEA, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/diagnosing-openlogi-devices of AprilNEA/OpenLogi.
Open the folder on GitHubat commit 0f69d75
OpenLogi Device Diagnosis 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| OpenLogi Device Diagnosis this skillAprilNEA/OpenLogi | 23k | — | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| The Art of Debuggingstas00/the-art-of-debugging | 1.7k | — | ~6.1k | Automated safety check: Notes | CC-BY-SA-4.0 | |
| Gearcoleco Debuggingdrhelius/Gearcoleco | 142 | — | ~3.5k | Automated safety check: Pass | GPL-3.0 | |
| Gridbash Panesjasonsuhari/gridbash | 134 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Dotnet Debuggingnovotnyllc/dotnet-artisan | 232 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Browser Setupclacky-ai/openclacky | 1.2k | — | ~3.1k | Automated safety check: Notes | MIT |
stas00/the-art-of-debugging
Condensed debugging method and tool recipes for Unix, Python and PyTorch programs: crashes, hangs, segfaults, wrong output, CUDA OOM, NaN values and slowness.
drhelius/Gearcoleco
Debug and trace ColecoVision and Super Game Module games using the Gearcoleco emulator MCP server.
jasonsuhari/gridbash
Coordinate with sibling agent panes from inside a GridBash grid — list panes and their roles, read what a pane is currently doing, prompt one pane or every other pane, and rename pane titles so the…
novotnyllc/dotnet-artisan
Debugs Windows and Linux/macOS applications (native, .NET/CLR, mixed-mode) with WinDbg MCP (crash dumps, !analyze, !syncblk, !dlk, !runaway, !dumpheap, !gcroot, BSOD), dotnet-dump, lldb with SOS…
clacky-ai/openclacky
Configure the browser tool for Clacky. An agent skill from clacky-ai/openclacky.
gnomeria/usbtree
Systematic root-cause debugging — reproduce, isolate, fix at the source, prove the fix.
AprilNEA/OpenLogi
Decides whether an OpenLogi device problem on macOS is a privacy-permission (TCC) problem, using agent log lines, and says which identity needs which grant.
AprilNEA/OpenLogi
Guides recording, privacy review and offline verification of OpenLogi device fixtures with the fixture contribute and verify commands, without treating replay as proof of hardware behavior.
AprilNEA/OpenLogi
Verifies OpenLogi's native GPUI interface with focused tests, the component gallery and a mock agent, choosing the evidence that fits each change.
AprilNEA/OpenLogi
Plans the smallest check that could disprove a code change in the OpenLogi project, then escalates through reproduction, focused tests and a final gate before a push.
Categories
Finds the first failing layer when an OpenLogi Logitech device is missing or misbehaving across enumeration, open, probe, IPC and UI. This skill walks an agent through locating the first failing layer when an OpenLogi device misbehaves, before any permission change or code fix is proposed. OpenLogi is a local Logitech device manager written in Rust that talks to devices over HID++.
OpenLogi Device Diagnosis fits situations like: A paired Logitech device does not show up in OpenLogi; opening or pairing a device fails, or the inventory looks stale; A device reconnect fails or a control is reported as unsupported; the openlogi CLI and the GUI disagree about what is connected.
Run `npx skills add AprilNEA/OpenLogi --skill diagnosing-openlogi-devices -a claude-code`. Or copy the skill folder (.agents/skills/diagnosing-openlogi-devices in AprilNEA/OpenLogi) into .claude/skills/diagnosing-openlogi-devices in your project. Claude Code loads it when a task matches its description.
Run `npx skills add AprilNEA/OpenLogi --skill diagnosing-openlogi-devices -a codex`. Or copy the skill folder (.agents/skills/diagnosing-openlogi-devices in AprilNEA/OpenLogi) into .agents/skills/diagnosing-openlogi-devices in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add AprilNEA/OpenLogi --skill diagnosing-openlogi-devices -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/diagnosing-openlogi-devices, .gemini/skills/diagnosing-openlogi-devices, .github/skills/diagnosing-openlogi-devices and .opencode/skills/diagnosing-openlogi-devices in your project.
SKILL.md names no scripts, command-line tools or credentials: OpenLogi Device Diagnosis is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
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.
OpenLogi Device Diagnosis is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.6k tokens (SKILL.md is roughly 6.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with OpenLogi Device Diagnosis: The Art of Debugging (stas00/the-art-of-debugging, 1.7k stars), Gearcoleco Debugging (drhelius/Gearcoleco, 142 stars), Gridbash Panes (jasonsuhari/gridbash, 134 stars) and Dotnet Debugging (novotnyllc/dotnet-artisan, 232 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
AprilNEA (a GitHub user) maintains it in AprilNEA/OpenLogi, which has 23,344 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 10, 2026.
Source: AprilNEA/OpenLogi on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.