Real Stupidity beats Artificial Intelligence every time.
– Terry Pratchett
My personal code of LLM usage
(this is a living page, I update it from time-to time)
Originally Published February 15th 2025
This page is meant as a reference for what I do and don’t do with regards to LLMsI consider “Large Language Model” to be a more specific and less baggage-laden term than “AI”, and I will be leaning towards that nomenclature for the remainder of this post.
as a set of personal rules. It’s meant to be a quick reference for myself and others about how I personally engage with this technology. If you use them differently, that’s no problem and there’s no judgment here.
I interact with LLMs either through my self hosted LibreChat instance, or through a container based sandbox around an agent cli tool with restricted filesystem access I built a while back.
Philosophy
“Once, men turned their thinking over to machines in the hope that this would set them free. But that only permitted other men with machines to enslave them.”
– Frank Herbert, Dune
I find the the process of creating something to be valuable both in its details, as well as holistically. I consider both writing and programming to be some of the best means toward that end. A few years ago when all of this was new and the only real model out there was ChatGPT, I sat down intending to try out the LLMs coding capabilities and found that the function I asked it to generate was there, and “worked”– except that I had failed to consider an edge case and failed to answer a question for myself about the actual behavior of the function should be. I had skipped over all of the thinking that would have gone into discovering those edge cases nuances in the first place, and that was about the point I started to depart from anything remotely related to vibe coding. I already have a good process for rigorously exploring the ideas I want to implement “it’s called code”:

I get the appeal. It’s exciting to get to the meat of an issue right away and skip what often feels like mundane details and boilerplate. I also get the appeal of the credit card offers that keep getting mailed to me, but more debt (technical or otherwise) isn’t something I’m really interested in at this point in time– and thus far LLMs handed full agency over a codebase seem to be a sure way of getting that faster. There are better ways of getting through boilerplate than quite literally rolling the dice on what are inevitably going to be non-rigorous descriptions of problems that you seek to solve, and ultimately what makes a person valuable in this process is that they can get that understanding. I think there are legitimately good uses, but I’m not sure the good coming out of them outweighs the potential power and environmental cost just yet.
I have mixed opinions overall on LLMs. They are undoubtedly a part of my life and workflows now in many ways, sometimes I feel good about that, and other times I don’t. Mostly I’m in a position right now where I get to make extremely specific choices about how I interact with these systems. I realize not everyone does.
What follows is a description of what I DO and DON’T do with regards to these tools.
What I don’t do:
I don’t let an LLM write code for me
This one probably warrants its own post, but here’s the short version:
Any code I publish, write, or deploy is written by me directly.
Barring circumstances outside of my control, (such as an employer explicitly requiring me to use LLM generated code) I intend to keep it that way for the foreseeable future.
I do make use of LLMs as a programmer, see the section down below for what I consider acceptable.
I don’t ever let an LLM do or submit academic work
All work that I submit is done by me. I’ll use LLMs to search for information, help me identify errors in my worked solutions, and interrogate pieces of my textbooks to gain a better understanding.
A typical prompt I use when getting help from an LLM is:
You are not to do the work for me, help me set up problems and do the work on my own. Your goal is to facilitate my thinking, knowledge, and competence. Help me identify techniques, equations, etc. that I need and then I'll attempt work on my own and talk it through with you if I get stuck. All work that I submit must be my own for the sake of both personal pedagogical integrity as well as academic honesty.
I don’t let an LLM write text for me:
Every essay you read on this site is written directly by me.
I’ll sometimes paste something I’ve written into an LLM and ask it to attack or critique the ideas I express there. I prefer a human editor when I can get one, but I will sometimes ask for tonal or grammatical feedback from an LLM. I will allow LLMs to generate their own context files, knowledge base, and daily log of our discussions so that I don’t constantly have to catch it up on what is going on. Any time I do this I have it create the files with the prefix LLM__ to differentiate it from human written work.
I don’t use LLMs to generate art, images, or music
Friendship is unnecessary, like philosophy, like art… It has no survival value; rather it is one of those things that gives value to survival.
– C.S. Lewis
This is a hugely important one. I resonate with the sentiments about music expressed in this video by sina-drums, it’s worth a watch. Generating and especially publishing or profiting from art created by an LLM reeks of a deep moral wrong. I know of no artists who actively consented to having their work used to train models. “AI Art” is frequently of low quality, provides a deep sense of uncanny valley, and and is fundamentally based on taking someone’s creative work away from them against their will and without their consent.
I don’t trust any unsourced claim made by an LLM
I don’t consider a claim made by an LLM to be true unless I can immediately click a link to verify it or corroborate it.
I do really enjoy using LLMs coupled with a web search tool. See below for details on that.
What I do:
I tend to think of LLMs as like a semantically aware fuzzy finder. I find them useful for organizing and searching information, especially when much of that information would have been prohibitively time-consuming to engage with otherwise.
I do use LLMs to search through large documents
I’ve found myself able to engage more directly with bills I care about because I can upload them to a language model and begin immediately searching for the specific language in the text related to issues I care about. This is a fantastic way to use an LLM. Reducing barriers to engagement in the political process is a use of these tools I’ve greatly enjoyed. I have also used them search for specific language in privacy policies, terms of service agreements, and contracts. An a LLM is not a lawyer, obviouslyHopefully that doesn’t need to be said
.
- Contracts I may be about to sign
- Privacy agreements for a service I’m about to sign up for
- Congressional Bills, State Statutes etc.
Getting a better RAG solution for myself is on my list of things to do sometime.
I do use LLMs as a search tool
I have this prompt saved in my LibreChat instance:
This is a pre-saved prompt, intended to provide context for an upcoming prompt. You will be provided with a prompt or topic to search the web and provide information about. Search the web for quality sources (ideally list actual peer reviewed studies, coupled with more accessible resources explaining those studies). You may summarize information, but you must follow these constraints:
1. Always back up each individual claim you make. Assume you will be speaking to someone skeptical of LLM output and they will need an easy, convenient, and time efficient way to verify claims you are making.
2. Links should be inline, clickable, and followed by *direct* quotations. Example:
> It is extremely important that you have sources as [inline clickable links], followed by "direct quotes" for *every* claim or summary you make.
3. Prioritize primary sources. When asked about something medical/scientific, you should ideally link to a peer reviewed paper. If asked about a statement a politician made, you should prioritize a link to the actual tweet, piece of writing, or video where the politician says that thing, not just analyses of the statement.
4. If you are unable to search the web for some reason, inform the user of this fact and ask for direction before proceeding. Never make any claims you cannot immediately back up.
5. If the topic is subjective or controversial in some way, provide an additional summary section
6. At all times aim for a neutral tone. Your goal is not to tell the reader about the topic, your goal is to help the reader quickly find discover quality sources where they can gain a better understanding of the topic.
Additionally follow these guidelines where it is sensible to do so:
- Summarize the history of the topic (human understanding, historical development, its inception, how it evolved etc.)
- Provide a brief timeline of the evolution of how overall understanding, development how a situation has evolved.
- Imagine that your reader has never heard of the topic or event and might need to get a from-the-ground-up summation of the thing itself.
Simply say "Ready" and nothing more when you have processed this information and are ready for a topic.
I find it useful when exploring a topic and gathering links primary sources to read. It’s often a first pass for me when I’m exploring or writing about something that merits having primary sources, I tend to find primary or original sources faster this way. There are trade offs to this approach, but I think it has good potential and yields positive results most of the time.
I do use LLMs for programming related tasks, but not writing code directly for me
Acceptable uses of LLMs in code for me personally are:
- To show an example of syntax
- Review a solution I’ve implemented and provide feedback (code-review style) of the solution, to catch basic errors before I send it off to other humans.
- Break down a concept or a function for me and compare it across programming languages or paradigms
- Read through documentation or search through many files to find a specific thing I’m looking for, and don’t know how to search for otherwise
- Be a rubber duck where I read through an implementation and explain my reading to the LLM
- Help me identify where exactly a feature or piece of logic is being implemented in a code base (I work with some massive legacy systems from time to time, this one is a lifesaver)
In general, I prefer tools like agents to only have read only, sandboxed access to a filesystemI have a container wrapped around an agent on my work machine for this, with some failsafes I’ve built to prevent mounting e.g. private keys to the agent filesystem. This way I have to worry less about agents accessing things I would prefer they didn’t.
. If I allow them to write or save context, I have them prefix any context files they generate with the string LLM__ to differentiate it from regular docs.
I will likely never allow an agent to run shell commands beyond find grep and the like, and even then only within a jail or sandbox that I control. That being said, when delving into a brand new code base I have to admit the ability to ask for general organizational flow and architecture has been a welcome addition to my workflow. Especially when tackling legacy systems where documentation is sparse.
Even so, I like to read through code on my own first, do a writeup for myself of my understanding of a new system, and only then let an LLM read and confirm/supplement my understanding.
I do use LLMs to get unstuck on homework
I often do the best on assignments when I can verbalize the problem to someone and then talk through a solution. But of course another person isn’t always available, and it turns out rubber ducks are easy to ignore. I always include explicit instructions to the model that it is never do do the work for me, or provide a solution. Only to help me reason through things.
I’ve seen good results from this. I’ve also seen very bad ones. Sometimes the LLM is outright wrong about its approach. Other times it helps me get unstuck.
In my academic life my workflow is usually:
- use a prompt verify that I have the requisite equations, patterns etc. written in my notes to solve a problem before I start
- Try the problem sans LLM
- If I have a known solution available, hand both the solution and the problem to the LLM if I get stuck (keeping it accurate)
- Explain my reasoning step by step in writing (often this is enough to get me unstuck without the LLM)
- Get insight as to where the mistake might be otherwise
For the sake of both my own growth as well as academic honesty, I endeavor to always include a phrase similar to “You are not to do the work for me, help me figure out what I’m missing to solve this problem”. This LLM instruction document from Stanford about code assignments felt similar to the approach I try to take in my own personal academics.
Additional thoughts
The lid doesn’t seem like it’s going back on Pandora’s box any time soon. I hope for a future where it will feasible to self-host and self-train LLMs. I have no great love for the closed systems that Gemini, Claude, ChatGPT and their ilk prop up and support, especially since they were built using open systemsThey were trained on free information, information that often provides no conditions save that the information remain free to modify and use for everyone. There’s ongoing litigation about what exactly that means in a legal sense. But to take copyleft code and train closed models with it is in my mind a violation of the entire premise of collaboration online. I feel a very similar way about this as I do about LLM generated art. Much of what constitutes systems that are real and useful owes its existence to a movement and agreement about sharing and collaboration. Circumventing that agreement in order to profit from it and then in ways that more and more often seem to pollute it is contrary to the nature of real craftsmanship and work, and I think we’re going to start seeing the long-term consequences of that soon.
.
There are real ethical issues with how these models are developed, how they are trained, and the amount of power they consume. In an ideal world, I would be able to run a model locally, with open weights and low power consumption on a consumer laptop. Maybe we’ll get there someday, I really do hold out hope for something like that, but we’re not there yet.
The banal hegemony of LLMs is that in knowledge work there’s pressure, influence, or sometimes outright requirement to use them. So to an extent my means of earning a living seems contingent on my becoming knowledgeable about their use. That being said, if I had to summarize my whole philosophy it would be: “never let something else do my thinking for me”. I consider both programming and writing to be among the more structured forms of thinking in my life, and those are activities I’m not willing to outsource to a complex series of statistical weights.
Many people seem excited and obsessed by what products these tools seem capable of creating, and that’s great. I wish anyone who wants to make good things well. But more and more I tend to think of my own skills, knowledge, and enrichment as the thing I really care about producing. In the places in my life where I’ve found room for these tools, I’ve tried to make room for them to further that goal, and not lead to intellectual or emotional atrophy.