My AI Usage Statement
Lately, on the Clojurians Slack, there have been a number of discussions about how people are evaluating projects that have been created with the assistance of AI tools (LLMs). Some people have very strong opinions and won't use projects that have any level of AI involvement, while others might only avoid "AI slop" / "vibe-coded" projects. The common thread is that people who have concerns about AI want maintainers to be transparent about their use of AI tools in creating their projects.
I use VS Code for all my development work. My employer provides a license for GitHub Copilot, and VS Code is set up to use that for my various work projects. Mostly, I lean on it when working with frontend and mobile projects, where I have less experience and need more help navigating the APIs and ecosystem.
I use that same VS Code setup for all my open source projects too, so Copilot's "help" has leaked into those, mostly in the form of auto-complete suggestions, often in the documentation and change log, but also sometimes in the code itself. I was curious where the line was between basic auto-complete provided by VS Code and the language support extensions, and the more expansive auto-complete provided by Copilot, so I changed the setting for co-author credits in commits, from the default (only credit agent-generated code) to also credit Copilot as a co-author when a commit contains text or code that was provided via auto-complete, generated by Copilot. That now means that most commits in my projects show Copilot as a co-author.
What does that mean for you as a user of my open source projects?
Every commit in my projects is reviewed line-by-line by me, before being pushed to GitHub, regardless of whether I wrote it entirely by myself or whether some of it was auto-suggested by VS Code or by Copilot. I'm getting auto-complete suggestions as I write this blog post, and I expect some of those suggestions are generated by Copilot, but I still read every line I write and edit it before publication. In other words, in my code and in my writing, any errors and omissions are my responsibility, not the AI's. I stand behind my published work.
Do I accept Pull Requests that were created with the assistance of AI tools?
Yes, sometimes. I require every PR to come with changes/additions to the tests and to the documentation. I review every PR line-by-line, and provide feedback to the contributor, and often push for changes.
If the PR is substandard, it won't be merged, regardless of whether it was created with the assistance of AI tools or not. If the PR is good (and solves a known problem that has been discussed!), it will be merged.
The Bottom Line
If you see Copilot as a co-author on a commit in one of my projects, that probably means that some pieces of text or code were suggested by Copilot, reviewed by me, and then accepted as auto-complete.
Even in the cases where the Copilot contribution was more substantial, it has still been reviewed by a human (me) and I take full responsibility for the final content.
Some Specifics
At this point, HoneySQL is the project with the most AI involvement. At least two PRs were created by AI, one from a contributor using Claude, and one from myself using Copilot. Because of the common structure throughout much of HoneySQL's code, LLMs seem to do a fairly good job of producing the recursive descent formatting code for new SQL language feature support.
core.cache contains a Claude-generated solution to CCACHE-65 after several of my own attempts to solve the problem were incomplete/incorrect. I reviewed every line of the change, and Fogus and I continue to discuss this particular issue because there is still an edge case that is not handled yet.
I have published just one project that was "vibe-coded": Calva Settings Audit. I wanted a quick way to get a list of all the Calva settings in VS Code and see whether I had overridden any of them (at a user or project level). The JSON-C format used for default settings in the Calva extension is gnarly, and the user-level and project-level settings are in a different JSON format. I'd been trying to figure it out for a while, so I could write a Babashka script for this but kept putting it off due to the JSON structure. Finally, I asked Copilot to write it, and it produced a working solution pretty quickly. All subsequent changes to that project have also been made by Copilot. The code is nasty but it works. It's useful to me. I wouldn't have written it without AI.