Trying Out GenAI as a Manual Programmer
2026-07-31
Everything I’ve published so far – both code and text – are manually written by me. I intend things to be like that forever, especially for personal projects with my name attached to them. I’m nobody, but everybody has pride and a unique identity. But what about the use of GenAI for the creation of custom tools? This week, I tried that, resulting in a small script and a browser addon that are highly useful to me personally. I could have totally written them myself, but the time to type the code alone would’ve taken longer. Of course, everybody “vibe code”s these days, so what’s the point of this blog post? Because things are different when you use GenAI as a person who can actually code, and as someone who cares about freedom, privacy, and other ethical aspects.
Should I Be Doing It?
When it comes to anything that could be done on a computer, most people start by asking “how can I do that?” More informed users ask the question “is it safe to do that?” People who have been introduced to the concepts of digital rights and ethics ask themselves “should I be doing that?” For example, they write and keep their documents locally using Free Software and open file formats rather than some cloud tool with remote storage and proprietary file formats that could disappear any time. This way they make sure their data is safe, both in terms of privacy and access.
As someone with many ethical concerns, I’m naturally reluctant to ride the current GenAI wave. Starting with originality, “it’s just a tool” is not a valid excuse. A pen doesn’t write for you. When you use a typewriter or a word processor, the characters are not shaped by you, but the words and thoughts still are. That said, not using GenAI doesn’t make any sense when it comes to writing unreleased tools, at least from an originality perspective. Even for hardcore geeks, it’s not like everything they run on their PC is written by them. When I need a small script to, say adjust windows across multiple monitors in a way not supported by the window manager by default, I simply download and use a ready-made script written by someone else (of course, from a trustworthy source or after checking the code). So what difference does it make it is coded up by a GenAI tool? Either way, I didn’t write it.
What about other ethical concerns? Yes, there is environmental impact, but I hope me quickly generating a small script isn’t worse than all the other negative impact that I’m already causing as a modern human being. Security isn’t a concern since I can manually review the code, and I would never let any “AI” tool loose on my filesystem. The last point brings us to freedom, actually.
Remote Tools and Freedom
It might sound surprising that a Free Software person would chose Gemini built into Google Search as the model for this experiment. It is neither local nor free (as in freedom). But I find it okay for a couple of reasons.
A technical thing I like about in-browser GenAI tools is that they do not have access to your filesystem. Yes, you’ll have to selectively feed them the current code, but it won’t be very tiresome for experienced developers if the project is small.
But what about freedom? I believe that using a remote in-browser GenAI tool to write small programs affects your freedom in no way (except the proprietary JavaScript part, which I’m okay with because site-specific JavaScript is useless outside those sites). Once you obtain the code, you can say bye to the GenAI tool. You can keep, edit, and run the code forever using nothing but Free Software.
Another thing that is promising about GenAI in the context of freedom is, maybe this is an opportunity to strengthen Free Software? Can we generate useful tools and share them under strong Free Software licenses like the GPL? I’m not quite sure about this considering (a) LLM-generated code can include snippets that infringe other people’s copyright, and (b) whether LLM-generated code can be copyrighted is unclear. The latter is not a problem if one is okay to share code under public domain rather than something like GPL, but the former still is.
Things Delivered
The other day I faced a trouble that I often do: having to include so many screenshots in a LaTeX Beamer presentation (if you don’t know what it is, it’s just a code-based way to create slide shows – just like you write HTML to prepare a Web page). When you are on something like LibreOffice Impress (or Google Slides or Microsoft PowerPoint, if you are from that world), it’s just copy-paste. But I like Beamer a lot (especially via Pandoc), except for including screenshots. When I’m including a screenshot taken with Firefox, I have to download it, locate it in the Downloads folder, rename it, move it, and add the code to include it in the slides. Worse, I’d have to tweak the width and height based on the orientation.
This time, I decided to write a script to automate it. But with my
mind made up about the use of GenAI for unreleased tools, I decided to
take that path. With a short sequence of prompts and manual edits, the
script was ready in a matter of minutes. When run after copying the
image, the script would save it to the current (or given) directory,
automatically finding its sequence number, and print the
\includegraphics command with a width and height that is
appropriate for the aspect ratio. I could’ve written it on my own, but
it would’ve taken longer and made no sense considering I would’ve
downloaded the script from somewhere if it were already available. Also,
remember that I was not planning to publish it.
Another thing I got developed was a browser addon that would scrape my account balance from different netbanking sites. Of course, I need to log in manually, but at least I don’t have to copy and consolidate the figures (remember that copying text from netbanking sites is harder). This time, it wasn’t magic. It took many specific prompts and manual edits, and if it weren’t for my prior experience developing a bigger addon manually, I’m sure it would’ve taken longer (or hit a wall).
RepeatDumbGenAI, Caught Thanks to Git
There were a couple of serious issues I noticed during the generation of the addon. One is that, even when corrected manually, Gemini kept making the same mistake. Specifically, it was about a missing slash and a missing subdomain in a URL pattern. This mistake made the addon not work, which I had spotted and corrected. But during subsequent prompts, it kept reverting this URL pattern to the wrong version. It repeated the same mistake for other URL patterns added later as well.
Silently making unrelated changes looks like a general pattern with LLM-based GenAI, and it makes sense considering they are just token generators rather than instruction followers. Nevertheless, this is dangerous, especially when the unasked-for change has no immediate visible impact. I faced something invisible (but not exactly dangerous) in the comments. At a point, Gemini had replaced a comment (that it had written) with a meaningless alternative:
-// Keep execution looping indefinitely until elements are populated
+// Keep interval runner active for runtime safety framework layout
A version control system like Git is essential in this case. With Git, one could spot unrelated changes before committing. Without Git, one would have to read the entire code after each prompt like a robot.
Remarks
I’d prefer to use the technical term LLM (Large Language Model) instead of the overloaded marketing term “AI”, but most GenAI tools out there aren’t just LLMs under the hood.
I don’t have a Google account, and I wasn’t logged in while using Gemini for these experiments. Usually, I use DuckDuckGo for search.
Nandakumar Edamana
Tags: experience, freedom, privacy
Read more from Nandakumar at nandakumar.org/blog/