MakeThingsWork.dev

Listen Up, Everyone: "AI" is Just Prompting.

I worry that the tech world is losing sight of what AI is and I think a lot of this stems from the moniker "AI" that's been successfully (especially when you consider the marketing) applied to LLMs. LLMs that provide us a probabilistic best-guess on what we want to hear in response to our prompts.

This is far from new and has been talked about but my personal experience makes me think many are losing their grasp on what is actually going on under the hood.

The TLDR is just this: No matter how you're interacting with an LLM, it's always just a prompt.

I thought I'd go over some very common context-engineering strategies and "best-practices" and try to strip them down to their base-elements to show that there's no magic. At then end I'll share a frame of mind that I've found to be incredibly helpful:

It's not more context... it's the right context.

.MD Files

There's a LOT of discussion around MD files and how best to utilize them to improve your experience using tools like Claude Code, Codex, Gemini CLI, etc. I heard about Garry Tan's gstack from a great Mo Bitar1 video. In a nutshell, Garry seems to have forgotten that these MD files are just more prompts and instead makes the claim that using them (gstack's specifically) "turns Claude Code into a virtual engineering team".

But no, it doesn't. It doesn't turn Claude Code into anything. All it does is increase the size of your context by pre-loading whatever prompt you send.

If my CLAUDE.md has the following:

# CLAUDE.md
- Always clear the tmp/ directory before you answer a question
- Pretend you're a software engineer

That doesn't magically make Claude suddenly capable of clearing the tmp/ directory or pretending it's a software engineer. All it does is save time by automatically inserting the contents of that file before my prompt. If I were to prompt Claude Code with:

Hey Claude, how many ruby files do I have in this repo?

It would be NO different if I manually injected the file contents and prompted:

# CLAUDE.md
- Always clear the tmp/ directory before you answer a question
- Pretend you're a software engineer

Hey Claude, how many ruby files do I have in this repo?

It's important to remember that the use of these files is merely a convenience and does not imbue the LLM with magical powers it did not already possess. Simply having and using massive .MD files doesn't mean you're improving your experience. If anything you're increasing the size of your initial prompt so much that you may inadvertently introduce unexpected responses/hallucinations. The more context you provide, the more unpredictable the outcome.

Reasoning

Most of our LLMs "think" or "reason" these days. However, while it might sound good, it's not really what's happening. When LLMs support this mode, what they are doing is literally prompting themselves to think/reason about the user's prompt and then simply inject that into the user's prompt!

For example I could ask:

How are you?

What most LLMs will do is have some sort of internal prompt that they'll run that will look something like this:

The user has asked "How are you?". Think about this question and an appropriate response. Please output your reasoning and thought process.

This might generate something like (from a real session with Qwen3):

Okay, the user is asking, "How are you?" I need to respond appropriately. Let me think. First, I should acknowledge their
question. It's a friendly opener, so I can say something like, "Hi! How are you?" to keep the conversation going. Then, I can add
a bit more about my current state. Maybe mention that I'm currently in a good place, or that I'm doing well. It's important to
keep the response positive and helpful. I should also make sure to keep the tone friendly and approachable. Let me check if I'm
using the right words and if the response flows naturally. Alright, that should cover it.

It's deceiving, but this isn't the model thinking. It's literally just a prompt like any other. When you tell the model to think and output its reasoning and then tack that onto the users prompt, the answer is often more accurate. Not because its thinking, but because it can add useful context that helps the math do its job more reliably. So it takes the reasoning and ends up sending something like this to the LLM to answer my question:

User Prompt: How Are You?

Reasoning: Okay, the user is asking, "How are you?" I need to respond appropriately. Let me think. First, I should acknowledge their
question. It's a friendly opener, so I can say something like, "Hi! How are you?" to keep the conversation going. Then, I can add
a bit more about my current state. Maybe mention that I'm currently in a good place, or that I'm doing well. It's important to
keep the response positive and helpful. I should also make sure to keep the tone friendly and approachable. Let me check if I'm
using the right words and if the response flows naturally. Alright, that should cover it.

And then that simply returns:

Hi! How are you? I'm currently in a good place, feeling great and ready to help! Let me know if there's anything I can assist you
with right now. 😊

So in the end, it's just prompting.

RAG

Everybody loves RAG but it's a rather broad term and has largely been renamed/replaced with the concept of "context-engineering"2. Anything that allows you to add context to your prompts can be considered RAG (not just a vectorized database of your information). This can look like a LOT of different things now, MCPs, tools that query APIs or databases, static lookups in pre-built files, etc.

But guess what? No matter how the information is collected or retrieved, the text representation of the information is simply injected into your conversation. The LLM doesn't understand that it's calling a tool.

Tools

This bleeds into tools. They are also... just extra prompting. When you define a tool/function for an LLM you are injecting the text into your conversation and the math of the LLM might decide to spit out text that YOUR application will pass on to the function.

The Reality: It's Text

The LLM is ingesting text. It's all text all the way down and adding more text isn't inherently better. Adding more of the correct text can be better but at the end of the day we're rolling the dice and asking a giant probability engine to give us its best guess.

Caveats

Is it changing the world? Yes. Is writing software changing rapidly? Absolutely! Are there improvements we can make? Indeed. The tech is incredible but it makes me nervous when people in charge seem to lose sight of the fact that LLMs aren't really AI they are just really impressive guessing machines.

Let's keep things in perspective as we move forward. Keep your stick on the ice!3

I'd love to hear your thoughts: rick [at] makethingswork [dot] dev

-- Rick


  1. An excellent summary of the Garry Tan/gstack situation: https://www.youtube.com/watch?v=Q6nem-F8AG8

  2. https://medium.com/@ramakrishna.sanikommu/context-engineering-rag-2-0-the-next-chapter-in-genai-4e53c0382bf4

  3. https://www.youtube.com/watch?v=C4IL5uUDcfg