Using AI as a Development Tool

Published on March 16, 2026

I am a computer engineer with a background in hardware and embedded software. In late 2025, I started using Claude Code as a development tool in my personal projects. The goal was not to test the tool on trivial tasks or isolated experiments — I wanted to understand how far it could serve as a real productivity accelerator across concrete projects in different domains.

The work was carried out on three machines: Glaurung (Mac, Apple Silicon), Ancalagon (Windows + WSL2), and Smaug (Particle Tachyon SBC, Ubuntu ARM). The period spans from November 2025 to March 2026, with an intensification in the last 5 weeks.

Below is a summary of what I produced during this period.


Key Numbers

~23k

Lines of code

~110

Commits

6

Languages

3

Machines


Multi-Machine Infrastructure

This was the most extensive work domain, covering everything from KVM switching between machines to infrastructure-as-code for a single-board computer.

KVM Setup (March 9–16, 2026 — 6 commits)

My daily workflow involves switching between a Mac and a Windows machine sharing two Dell monitors. The KVM switch is USB-only, so video inputs are switched manually on each monitor. Keyboard and mouse sharing is handled by Synergy. Getting everything to work seamlessly required several event-driven components:

  • usb_switch — a Swift daemon using IOKit to detect USB device arrival/removal events from the KVM switch and trigger display input changes
  • synergy_switch — a Swift utility using CoreGraphics to warp the cursor to screen edges, triggering Synergy crossing to the other machine
  • synergy_lock_watcher — redirects input to Windows automatically when the Mac screen locks
  • synergy_caffeinate — prevents display sleep while a Synergy client is connected
  • Lid angle detection via pybooklid — reads the MacBook lid angle sensor to dynamically choose the Synergy layout (side-by-side vs. stacked) based on the laptop's physical position relative to the monitor

All components are event-driven with zero polling, reacting to system notifications rather than periodically checking state.

Network Guard (March 11, 2026 — one day)

A problem emerged on the Mac when both WiFi and USB-C Ethernet were connected to the same network: macOS detected a duplicate hostname and automatically renamed the machine, causing connectivity issues. The solution was a Swift daemon using SCDynamicStore (~170 lines) that monitors network interface changes and automatically disassociates WiFi when Ethernet is active — while preserving AirDrop and Handoff functionality, which require the WiFi radio to remain on.

Setup Tachyon / Smaug (November 2025 — March 2026 — 64 commits) — WIP

Infrastructure-as-code for a Particle Tachyon single-board computer (Qualcomm QCM6490, Ubuntu ARM). This was the longest-running project in the set and covered:

  • Backup and restore with cross-version support (Ubuntu 20.04 ↔ 24.04), enabling migration between OS versions without manual reconfiguration
  • Docker services — Immich (photo management), Home Assistant (home automation), and Plex (media server), all orchestrated via Docker Compose
  • NVMe ASPM fix — an optional Pimoroni NVMe Base connects to the Tachyon via a PCIe flat cable, and the default L1 power state caused MSI-X interrupt loss, leading to I/O timeouts under load. The fix involved a 4-component solution addressing ASPM policy, interrupt coalescing, queue depth, and power state transitions
  • Fan control — software PWM via GPIO with a thermal curve and soft-start sequence, replacing the default always-on fan behavior
  • Consolidated monitoring — a unified dashboard tracking CPU and SSD temperatures, USB-PD power delivery status, and Docker container health

System Tools

Launchd Manager TUI (March 13, 2026 — 8 commits in one day) — WIP

A Rust terminal user interface built with Ratatui for managing macOS launchd services. The application follows a clean architecture with real-time filtering, log and plist file viewers, and $EDITOR integration for editing configuration files directly from the TUI.

An interesting debugging session involved character ghosting — residual characters appearing on screen after scrolling — which turned out to be a terminal rendering issue requiring explicit screen region clearing.

Activation Code System (February 7, 2026 — 2 commits)

A challenge-response authentication system for embedded devices using HMAC-SHA256. The code generation uses a triple layer: a word-based encoding, XOR with the device ID, and a checksum for integrity verification. Implemented as two Python scripts with zero external dependencies.


Peon Ping and Audio Reverse Engineering

Peon Ping is an open-source project for AI agent notifications, with 348 commits and over 50 contributors. My involvement centered on audio extraction and Portuguese language support.

Audio Extraction (February 13–14, 2026)

  • war2sfx-extractor — a parser for Warcraft II DOS WAR/SUD binary formats with LZSS decompression, written in pure Python. Extracted 676 WAV files from the original game data
  • extract_wc3.py — extraction of Warcraft III Reforged audio via PyCASC, with a monkey-patched root parser to handle the game's specific CASC archive structure. Extracted approximately 7,400 files
  • extract_sc2.py — extraction of StarCraft II audio via libcasc.so/ctypes, since PyCASC does not support the MNDX root format used by SC2. Extracted approximately 373,000 files. Not yet published

PT-BR Sound Packs

Peon Ping Contribution (February 14, 2026)

Added a Portuguese (BR) language filter in the sound pack picker, enabling users to filter available packs by language.

The highlight of this domain was reverse engineering Blizzard binary formats (LZSS and CASC) to extract game audio for an open-source ecosystem — work that required understanding undocumented file structures and adapting existing libraries to handle edge cases.


Applications and Web

Matchmaker (December 2025 & February 2026 — ~15 commits)

An existing sales analytics application built with React + Express + MariaDB that I fully containerized with Docker. The setup includes a development environment with hot-reload, a production environment with Nginx + SSL, and a unified mm.sh entry point script for managing both environments.

This Website — lucaspwo.github.io (March 2026)

The Sigaweb post was created bilingually (English and Portuguese) with Chrome headless visual validation on WSL2 to verify rendering consistency across both versions. A build system is currently in development (WIP) for converting Markdown to HTML using Nunjucks templates.


Reflection

After five months of using Claude Code across these projects, a few observations stand out:

  • The tool is an accelerator, not a replacement. The developer retains responsibility for direction, architecture decisions, and validation. The AI does not replace the need to understand what is being built — it reduces the friction of building it
  • Less friction when transitioning between domains. Moving between Swift, Rust, Python, Bash, JavaScript, and HTML in the same week would normally carry a significant context-switching cost. The tool absorbs much of that overhead, allowing faster ramp-up in each language
  • Collaborative debugging on hard problems. The NVMe ASPM fix and the Blizzard reverse engineering work required iterative debugging sessions where fast iteration was essential. Having an AI assistant that can quickly generate and refine hypotheses significantly shortened the feedback loop
  • The volume produced in approximately 5 intensive weeks would be impractical to achieve alone. Eight projects across six languages, three machines, and multiple domains — from kernel-level PCIe debugging to game audio extraction to web development — represent a breadth that would be difficult to sustain without the tool