For the last couple of weeks, I have been experimenting with using Claude Code to tackle the backlog of issues on the Forge gnome extension. My strategy has been to fix bugs and add features on one branch while simultaneously developing comprehensive unit tests on another branch. There is a PR with the two merged.

While we figure out how to split up the massive PR into more manageable ones, my goal remains unchanged – I want to recreate the things that I liked about Xmonad in this extension.

Before forging ahead and implementing features that I miss, I first wanted to “clean up” the code and remove some technical debt. Armed with a suite of unit tests and reasonable coverage, what could go wrong? Almost nothing (surprisingly) – it was trivial to ask Claude to improve the code quality and reduce technical debt (ironically, by generating code). This was implemented in several phases and even came with a couple of “free” bug fixes along the way.

Forging Ahead

One of the suggestions while Claude reviewed its own PR was that it should be easier to add windows to the ignored list as users discover ones that do not tile nicely. This seemed useful and a substantial source of issues, so we implemented it. In the settings UI, there’s now a form to add windows. Claude also generated a $schema for windows.json (which already could be used to set the list of windows not to tile) so that editors autocomplete it.

Having used vanilla Gnome for years, my muscle memory kept bringing me back to the arrow keys to move windows to the left/right side of the screen. This did not play nicely with Forge – the window moved but then Forge would snap it back into its slot on the next update. An easy fix was to alias the arrow keys to hjkl. I also disabled the conflicting keybindings in Gnome (and Super+V as well) – I will probably revisit this later if the user’s keybindings do not conflict.

More often than not, if I need to open a new window, it is a terminal. I used to have Super+Enter spawn a terminal in Xmonad but since Super+Enter was already taken in the default Forge keybindings, I made it so that Super+; spawns a terminal (or, if you wish, some other configurable application).

When implementing the previous feature, I noticed that I had no way of knowing when the settings were saved. Now, a toast pops up to let me know. There’s even a debounce timer so that it waits until you are done typing before saving.

While mucking around in the settings, I saw that there was no validation for the workspace/monitor skip settings. That was a simple fix.

One last feature for the week – since I am still learning all the keybindings, I keep looking at my cheatsheet but it is a pain to pull it up or look at a piece of paper. Instead, I had Claude implement a keybinding to pop up an overlay with a cheatsheet (and hide it again with the same keybinding). This CSS needs work but that is a problem for later.