Pangram verdict · v3.3
We believe that this entire text is human-written.
AI likelihood · overall
HumanArticle text · 1,890 words · 1 segments analyzed
Thorsten Ball · Laracon US · 29 Jul 2026 · Video · transcript from auto-generated captions, aligned to slides via frame matching; timestamps link into the video Intro — Aaron FrancisIntro — Aaron Francis · 0:00 Up next, we've got Thorsten. Okay, and if you don't know who Thorsten Ball is, you should ask your favorite developer who their favorite developer is, and odds are it's Thorsten. Okay? Thorsten is, one of the clearest thinkers in, in this space and has been for a very long time. Okay? He's written a couple of books, writing an interpreter in Go, writing a compiler in Go. So, I have seen people here with their books getting Thorsten to sign them. Now these days he spends his time thinking about, writing about, and writing software for, his new company that he co-founded, Amp. So, he's going to talk to us about Amp today. Previously, he's at Sourcegraph. Previously, he's at Zed. So, he's been in developer tooling for an incredibly long time. So, this is someone with a deep well of expertise that's going to help us think more about the frontier. So, all the way from Germany, please welcome Thorsten here we are. It's nice to be here. This is my first Laracon, and I know this is talk, and you shouldn't use too many efforts up here, but I just want to say it's fantastic to be here. just phenomenal, you know? so today I want to talk to you about how I prompt, how I prompt coding agents specifically. The problem with a lot of people who talk about AI is, of course, when you ask them, "What have you shipped?" the answer is, "Well, goes to a different school, you wouldn't know it, blah blah blah, it's hard, I can't talk about it." So, to establish my credentials a little bit, I'm one of the co-creators of Amp, which is a coding agent that came out last year, couple of weeks after Claude Code. We were one of the first, and a lot of people call it polished or high taste. Aaron actually told his wife that it is a delight, which, pretty good thing to hear. And This was our TUI last year. It's evolved tremendously in the last 6 months. So, now it looks more like this. It's a full-blown development environment. You can spawn orbs, which are sandboxes, and you can run agents in them. You can remote control agents running on your Raspberry Pi, your fridge, your lawnmower, wherever you want. You can preview stuff. You can do a lot of things. People call us to quote, again, I'm not bragging. I'm getting to a point here. I'm not just saying this to brag. People call us the Porsche of coding And a guy on Twitter doubled down and was like, "No, it's the Ferrari of Porsche coding agents." So, it is one of the most complex distributed systems I've worked on, and I worked on some interesting things over my career. Here's the kicker. Here's why I'm saying all of This is 99% written by AI. Nobody in our team really writes code by hand anymore. I certainly don't. I did a poll 2 weeks ago, and I asked the others on the team, "How much code do you write by hand?" You know, I started with 99 Sorry, by AI. 99, 95, 90, and less. Camden was like, "I think I write 10% by hand." And I'm like, "Really?" And he's like, "Ah, no, not really." So, it's a complex product that's beloved by many. I would say it's not slop. So, today I want to talk to you about how I prompt, like how I built Amp, or built large parts of it. Today, I'm going to reveal to you the effort that goes into prompts like the discipline and training that makes this happen, technique, artisanship, you can call it, maybe. The obsession and methodology. All of this, finesse, I guess. To be honest, I think let's call it what it is. This is engineering, right? This Look at this stuff. at the end of this talk, I promise you you will be able to prompt like this. I'm just kidding. This is the end of my talk. This is how I prompt. Thank you very much. No, my prompts my prompt actually look more like this. Pretty text-heavy. The good news is it's pretty Oh, let me go back. Sorry, let me go for Oh, sorry. Sorry. Sorry. There you go. It's actually pretty boring how I prompt. So, I don't use any MCP servers. I don't have to. I use one or two skills. I don't use any frameworks. I don't have any, custom slash commands set up going on. everything you see in this talk is something that you can do at home. Ideally with amp, but, you can do it in other coding agents, too. There is no secret sauce. There's no magic keyword, really, except while researching for this talk, I look at the last 2,000 prompts that I sent. It turns out there's this one word that I as a non-native speaker have never pronounced or said out loud in my life. Yet I keep using it in every thread when I talk to an agent. It's ridiculous. Like it showed up in every conversation I have. I mean, look at this. I even spent extra money to correct what I said just to get it in there again. So, maybe this is the magic keyword, right? But if there is such a thing as a magic little trick, it is this question. This is the one thing that I want you to take away from this talk. This is the one thing that I want you to ask yourself when you write a prompt. I don't mean in the existential way that you have to, bow your head in front of the desk and wonder, "Where does information come from?" But what I mean is when you write a prompt, you're talking to a large language model. What you have to think about is how is the model supposed to know what I mean? You know? A coding agent under the hood is just a large language model that has a context window. Like it's magical. Don't get me wrong. I'm not saying it's a stochastic parrot or anything like this. But it is at the end of the day just a a long piece of text that you send to a model and gets completed. So, if you ask a model to do something, the information with which it can interpret what you're saying, your prompt, can only come from a bunch of places, right? On the one side, we have the training data. That's as we know, the observable internet or all of the books or all of Stack Overflow, like all of this. Then, here's the more interesting stuff. That's the stuff that you can influence. The context window. So, in the context window goes your system prompt, the tool definitions, the MCP tool definition skills, agents, messages, meaning the whole conversation, the tool results, so everything that the model executed, every tool call that it issued. The results are in the context window. Most importantly, your prompt. So, if you write a prompt like this, how is the model supposed to know what the bug is or what the upload is? If this is your entire prompt, and your code base doesn't have an agents.md file where you clearly define what the bug is or what the upload is, it won't know. But, it's not like us. It won't say, "What the hell are you talking about? What bug? What upload?" It will say, "You're absolutely right. I'm going to fix the bug with the upload." And then, it's going to do whatever it thinks that is, right? So, here's the mental model that I want you to use. Imagine this, and I hope this doesn't hit too close to home for some. You're a senior engineer. You've done it all. You've worked Windows, Linux, Unix, macOS. You've done back end, front end, client. You know all the languages. You've read Stack Overflow. You got the most points on Stack Overflow. You can invoke an anonymous function every language known to anybody, right? Then, one day you walk to work, and somebody snatches you off the street, throws you in a van, puts a hood over your head, drives you somewhere, and then suddenly, hood is pulled off your hat and you find yourself in a room where there's nothing in front of you except a desk, and on that desk you see a computer, and on that computer there's a code base open in a text editor, there's a terminal, and a web browser. Then magically, or tragically in this case, somebody hands you a note, and on that note it says, "Fix the bug with theYou know? That's what the model experiences. So, when you write a prompt, you have to think about the reader. The goal of all writing is to be understood. If you're not practicing touch typing, you want the reader to understand what you're saying, right? It could be commit message, Slack message, text message, pull request message, or a prompt to a model. Every time you write something, you have to think in a loop, what does the reader know, and what do I need to tell them? What is the information they're missing? So, when you talk write a prompt, you're talking to a model, it's the same thing. You have to wonder, how does the model know what I mean? Where's the information supposed to come from? Is it the training data? Is it in the context window? Is it in the code base? Is it in my prompt? So, again, if you take anything away from this talk, it's this. It's this mental model of where's the information supposed to come from. In the rest of this talk, we're now going to look at some of my prompts that I write. This looks scary, but it's not, right? So, this is a prompt that I used to build a feature called daemon mode, which allows you to run AMP headless on multiple machines, and you can remote control them. This is pretty big. This is probably one of the biggest prompts. I can already This is a spoiler. I can already tell you I don't always write prompts like this, right? But just to drive the point home, look at this. This is the start. I start out by saying, "I need your help in building something biggish." Right now, in server and in thread actors, we can spawn new thread and sandboxes. So, I pointed at two directories. Then I say, "They spawn an ETUI sandbox. We start m-dash-dash-headless, which is our CLI. So, I say, in this folder is our CLI, that's this process. Then I say, then it connects to this, and then the user can remote control it. The details don't matter, but after this paragraph, I already pointed the model at three folders. This is where the information lives. This is roughly how they connected.