Debugging a Pi Zero 2W BadUSB with Claude Code: Fixing an 'Impossible' Bug

✍️ OpenClawRadar📅 Published: May 26, 2026🔗 Source
Debugging a Pi Zero 2W BadUSB with Claude Code: Fixing an 'Impossible' Bug
Ad

About 10 months ago, a developer built a Pi Zero 2W BadUSB toolkit but one feature — "fully resets between attacks" — never worked. Marked as WIP, it was abandoned. This week, they rebuilt the project end-to-end with Claude Code as a pair-programmer. The result: the "impossible" feature now works, and the session uncovered several subtle bugs.

Ad

What Claude Code Did

  • Diagnosed root cause in one read: The listener watched /dev/hidg0 existence — true from boot — so it fired payloads on power-up regardless of host attachment. The correct signal is /sys/class/udc/<udc>/state == "configured".
  • Empirically confirmed hardware limitation: When the first fix didn't fully work, Claude SSHed in, asked the dev to plug/unplug while it polled sysfs and the dwc2 debugfs regdump register. It found the GOTGCTL register freezes at 0x000d0000 regardless of cable state — the Pi Zero 2W has no VBUS sense wired to the SoC's OTG block. It pivoted to an active-unbind workaround with cooldown + rate-limit safeguard.
  • Caught a silent Python bug: open(udc_path, "w").write("") doesn't invoke write(2) with zero bytes — CPython's TextIOWrapper elides the call. The unbind was a no-op for an hour of testing. Fixed to os.write(fd, b"\n") to force a syscall.
  • Fixed forbidden-on-configfs teardown: rm -rf was failing because configfs forbids unlinking kernel-managed attribute files. Proper sequence is rmdir-only, leaf-to-root.
  • Wrote a 34-test pytest suite against a mock HID engine, enabling parser testing on any host without a Pi.
  • Updated AI memory: The developer uses Postgres as long-term memory for Claude — those bug entries are now referenced in similar configfs/USB-gadget projects.

The entire working session took about 4 hours, mostly waiting for physical plug/unplug. The PR had six well-scoped commits with proper co-author tags and a test plan. The project (Pi-Zero-2W-Bad-USB) is MIT licensed, with Ducky-Script-style payload language, variables, IF/WHILE, HOLD/RELEASE, INJECT MOD, RANDOM *, US/UK keymaps, optional RO mass-storage gadget, systemd integration, and idempotent installer.

For developers doing hardware-in-the-loop workflows with Claude Code, this is a compelling case study in AI-assisted debugging at the sysfs and register level.

📖 Read the full source: r/ClaudeAI

Ad

👀 See Also

Autonomous 5-Agent Claude System Replaces $3K/Month API Costs with Single Subscription
Use Cases

Autonomous 5-Agent Claude System Replaces $3K/Month API Costs with Single Subscription

A developer built a 5-agent autonomous swarm using Claude Opus 4.6 running as Discord bots on WSL2, powered by a single Claude Max subscription instead of API credits, replacing what would cost $3,000+ monthly with $100-200.

OpenClawRadar
Fine-tuning llama3.2 3B for personalized health coaching using Apple Watch data and MLX
Use Cases

Fine-tuning llama3.2 3B for personalized health coaching using Apple Watch data and MLX

A developer fine-tuned llama3.2 3B on a Mac using MLX in 15 minutes to create a health coach LLM that analyzes personal Apple Health and Whoop data. The model provides specific health insights instead of generic advice, running locally with a 2GB memory footprint.

OpenClawRadar
Localizing Large Codebases with LLMs: A Developer's Workflow for 4,500 UI Keys
Use Cases

Localizing Large Codebases with LLMs: A Developer's Workflow for 4,500 UI Keys

A developer shares their workflow for localizing a game with 4,500 UI keys using LLMs. They found that adding context to translation prompts and using local models like Qwen 3 8B produced acceptable quality, while cloud models like Claude and Gemini Pro struggled with file size and accuracy.

OpenClawRadar
Using AI to Port a Wi-Fi Driver from Linux to FreeBSD: A Case Study
Use Cases

Using AI to Port a Wi-Fi Driver from Linux to FreeBSD: A Case Study

A developer used Claude Code and Pi agent to attempt porting the Linux brcmfmac driver for Broadcom BCM4350 Wi-Fi chips to FreeBSD, first through direct code translation and then by generating a detailed 11-chapter specification for clean-room implementation.

OpenClawRadar