How I Built an AI Assistant with Claude Code

My talk at Philly CocoaHeads, covering the full journey from non-programmer to building a sophisticated AI executive assistant with Claude Code.

Alex Hillman
Written by Alex Hillman
Collaboratively edited with JFDIBot
JFDI

My first time really talking in depth about going from “haven’t written code in 15 years” to building the JFDI system with Claude Code.

I gave this talk at Philly CocoaHeads and covered the technical decisions, ethical boundaries, the philosophy behind the system, and what it actually looks like to build something ambitious with AI when you’re not a traditional developer.

I get into how I think about trust and safety, why I chose to build on Claude Code instead of using off-the-shelf AI tools, and the patterns that emerged from daily use over months of iteration.

Full Transcript

I had this moment where I was like, “Wait a second. This tool, its output is code and markdown files, but it’s really kind of a system generator. Code happens to be one of the languages it speaks. Markdown is the other. Besides obviously human languages, what other systems could I build that aren’t necessarily software?”

I’ve always had this dream of having one box that I can open up and drop anything I want into it. A link, a quote, a random thought that pops into my head. I have this habit, for almost 20 years I’ve been doing this, where I take a note of that random thought that pops into your head, just to get it out of my head. And then once a month I review all of those notes and look for patterns. It’s part of my way of seeing what are the things that pop into my head over and over. Maybe that’s a clue or a priority or something like that.

So I always wanted a box where, instead of having to figure out what app to put it in, with links, bookmarking has never worked for me, and I’m convinced it doesn’t work for most people, because it’s a junk drawer, right? Stuff goes in. And even if you are a diligent metadata person, good luck finding what you’re looking for again. Same thing with personal knowledge management tools: Notion junk drawer, project management tools junk drawer, to-do lists junk. It requires you to do a lot of thinking just to put a thing in, and then you have to remember where it is on top of all that. That’s what software should do.

And so my very first version was me figuring out how I could just drop a link into Claude Code with no other instructions and it would know what to do.


Welcome to Philly Coco Presents: Side Project Spotlight, episode 105. This is a developer journey into making cool stuff. I’m Cotto, I’m Steve, and I’m Aaron.

We are Philly Coco, a Philadelphia-based CocoaHeads community focused on Apple development, primarily, but not exclusively, iOS, Mac, tvOS, watchOS, and visionOS development. Philly Coco’s true desire is to take you higher on your own developer journey.

All right, so today we have a special guest. I’ve known this person for quite a long time. He is a co-founder at a Philadelphia-based coworking community called Indy Hall. I’ve known Indy Hall, oh jeez, I don’t want to say two decades ago, but -

Unfortunately that’s the correct answer.

I’ve seen our demographic breakdown in the podcast. We’re old. We speak to olds.

So, Philly CocoaHeads was actually founded in the basement of the original Indy Hall office, which was on Third between Market and Arch. Anyway, that’s beside the point. We’ve always had this sort of connection with Indy Hall, we evolved alongside it through the explosion of the app economy and then eventually moved back, and hopefully at some point we’ll have more opportunities to do presentations at Indy Hall. Without further ado, Alex Hillman, thank you for joining us today.

Thanks for having me, guys.

I’ve wanted to have Alex on for a while. And I’ll add, there are a couple of pieces to this story that I think are really interesting. One is CocoaHeads was effectively founded by Indy Hall members, and I think it was before it was even CocoaHeads. It was like a couple of indie Mac developer workshops that we hosted. And the other part is, I think Philly Coco can claim that you were the first meetup that we ever hosted, all the way back in 2007. So in the arc of Philly tech and creative meetups, Philly Coco was part of each other’s origin story.

Wow. Which is cool. So yeah, this is special for me too.

Awesome. I didn’t even know that part. When did you join? I think this was close to 2006, 2007.

The beginning would have been 2007. I really think it was in the fall after we opened our first spot. And Steve, I think we probably met after that initial spot when we moved into the place on Third Street, that would have been like 2009, 2010ish.

I went down to Philly Cocoa when the first conference was CocoaLove.

Yeah, with Curtis and the crew.

That’s where I met him. I still have the little glass portraits you made.

Yeah, with the illustrated badges. That was so cool. A pain to draw, but that was crazy fun. The first version I drew myself. That’s just kind of my MO, if I start something, I’ll be the first one to do it, and then eventually somebody with more time and skill can do the next versions. All the custom portraits for each participant, that we had to stealth-find and draw so it would be their badge as they came in, that was a nice treat for them.

I just realized we’re really bad at doing YouTube intros because we still haven’t explained why Alex is here.

This is the magic of editing, right? We’re not used to editing either.

But besides Alex having this relationship with Philly CocoaHeads, we wanted to bring him on because in the current era of AI, just insert your own air quotes whenever I say the word “AI” because I hate the terminology in the space so much. I don’t know how you feel, Alex, but I hate it so much.

Pretty sure I’m with you.

So the AI space, we’ve seen a lot of big hype and a lot of changes even just since December. That’s actually when I found it useful in my day job. And the thing that’s really been making waves lately, coincidentally, is the whole DeepSeek thing. But before that even happened, I saw over the holiday break, I don’t know how I first saw what you were working on, but you were working on your own personal assistant. I watched your YouTube videos, you had two really long ones, a live stream and your initial introduction, and I thought this is one of the coolest things I’ve ever seen people do. And you just explained it a little, but what is this thing you built? Because it’s hard to explain.

It is a weird thing to explain. I played with a lot of language around it. Back in October I started down the path of creating an executive assistant for myself using Claude Code, I think that’s the shortest answer I can give you. It has kind of spiraled, I don’t want to say out of control, because it’s actually spiraled into control in some really interesting ways. But what it has turned into is in so many ways not at all what I set out to build, and we can talk about that journey some more.

I think the interesting thing here is I started using AI developer tools, it was around this time last year, I picked up Cursor for the first time. I used it initially to build some internal tools for Indy Hall, and it was sort of a light bulb moment. My background is in software development, but I was never a particularly good programmer. I was a front-end developer. I was very good at HTML, CSS, and JavaScript in an era where cross-browser compatibility was actually a pain. So my specialization was being like a master plumber for getting your stuff to work in all browsers. But when it came to actual programming and engineering, that was always somebody else.

The good news is I was always around some really talented engineers, including within the Indy Hall community, and I learned a lot by working alongside those folks and picked up all of the architecture and systems design skills, which is my actual background. But then as Indy Hall took off and I got more into business, my programming skills atrophied even worse. I could build a website. I learned Tailwind so I could make landing pages. But that was really the extent of it.

Cursor was the first time I found myself at the intersection of: I know how these things work, but it’s never made sense for me to be the one doing it because somebody else is always faster or more skilled. I always had to puppeteer somebody else’s hands, or in some cases somebody else’s brain, which I really don’t like doing. I want to work with somebody who brings their own creative ideas to a project.

Working with the AI chat interface in Cursor gave me the ability to say: I know what needs to happen, I have some lightly-formed opinions about how it needs to happen, but so long as it works, I don’t really care. It’s just internal tooling, a lot of data plumbing stuff that I would previously do with Zapier, or fumble my way through some scripting, or hire a freelancer if it was just above my pay grade. And now the range of things I can do myself has just kind of exploded.

Then I started seeing people pick up Claude Code, I want to say around August or so of last year. I think it was Brian Castle, who has a great YouTube channel that folks should check out, where he focuses on the intersection of software craftsmanship and Claude Code, which feels like an interesting tension. Brian really thoughtfully rides that line. It was one of his videos introducing Claude Code basics where I was like, bye-bye Cursor. This is my new happy place.

I started using it the same way I was using Cursor, for the coding and data plumbing stuff. But then I had this moment where I was like, wait a second. This tool’s output is code and markdown files, but it’s really a system generator. Code happens to be one of the languages it speaks, markdown is the other. What other systems could I build that aren’t necessarily software?

And I’ve always wanted that box. Instead of figuring out what app to put things in, bookmarking has never worked for me, I’m convinced it doesn’t work for most people, it’s a junk drawer, and personal knowledge management tools, Notion junk drawer, project management tools junk drawer, to-do lists junk. It requires too much thinking just to put a thing in, and then you have to remember where everything is. That’s what software should do.

And so my very first version was figuring out how I could drop a link into Claude Code with no other instructions and have it know what to do. It would go out and search what was on the other side of that link, read it, figure out the context, and generate not just a bookmark but an actual note of sorts. It would file it in the correct place, and if it didn’t know where to file it, it would suggest places to file it that I could approve or come up with my own. Then make the recall just as easy.

In about 20 minutes, this thing I’ve been dreaming about for most of my life had a working version. And I was like, what? Because all it really was was an SOP, just instructions. If the link is from a major verifiable news source, handle it this way. If the link is a YouTube video, handle it this way. If the link is a podcast, go get the audio, see if you can get the transcript, use the transcript to process it. If it’s just a quote or an errant thought, maybe ask me for context about it, then use that to file it.

That was the lightning bolt moment where I was like, I think this thing can do a lot more than write code.

And I think people should, I’ll have a link to your YouTube channel, you have a couple of videos about it that really show it off that people should watch. Because it’s not just Claude Code. You went beyond that initial prototype into a full-on web app wrapper around it, which isn’t even doing it justice because it’s not just a wrapper. There’s a lot of tooling you built around it. You have a custom interface you can access from anywhere, and I’d love to talk about how that works because this is a programmer podcast.

I was hoping we’d get into the weeds on that stuff.

Yeah, we love the weeds here. So let’s talk about the architecture, because I started building this in October of 2025.

So long ago now with AI.

It feels like a million years ago. The Claude Agent SDK, which is sort of a stripped-down version of the Claude Code internals for building your own agent from scratch, that didn’t exist yet. So it wasn’t even a choice between the Agent SDK and Claude Code. It was Claude Code. This is the magical tool that handles data in interesting, weird, squishy ways.

I don’t have a lot of experience with Claude Code, mostly with Codex, but as I’ve been looking at the differences I can definitely see Claude Code is currently the better tool for this. It has the hooks, we may get into the weeds on that, which aren’t yet in Codex. It seemed like you kind of found the right tool.

I feel very lucky to have found it when I did. And the evolution of the tool has been cool too. We’ll come back to that.

So let’s talk about how it’s actually set up. For the first month I was in a terminal. I did all of my work in a terminal, and I’m not a programmer. I was managing my inbox in my terminal, planning events and calendars.

Like an old school Unix guy.

Yeah. I was like, I’m back in high school. Someone’s going to introduce me to Emacs.

Claude Code is intimidating for non-programmers, but as somebody with a technical background who is comfortable in a terminal, it was my first time really living in a TUI environment and I was pretty impressed with it. The biggest problem I had was it was, and still is, a little glitchy. It does this scroll-jumping thing, especially when you’ve got long-running sessions or a lot of diffs in the view. That was annoying, but I kind of just dealt with it because whenever it’s done, it’s done and the problem would solve itself.

Where I really started running into issues was when I wanted to use it on my phone. I’ve got it on my laptop, I’ve got it on my M2 Mini at home, but when I’m mobile, I’m using Termius, which is one of the better terminal apps. I pay for the credential syncing and all that, it’s really nice, but all those scroll issues and even just typing in a terminal on your phone kind of sucks. Termius has the best version of it and it still kind of sucks.

I was like, if this is going to be a major way I interact with the system, which is definitely a goal, I can’t keep SSHing into a server and running a terminal. So I tried a bunch of tools. There was one called Happy, another called Omnara. They’re basically Claude Code wrappers that give you a mobile app, usually a native mobile app, and you could chat with Claude Code. I tried it and, to their credit, it was early, they were impossibly buggy. Unusably buggy. Omnara probably got me the furthest but it was crashing all the time.

I’ll just interject briefly: if you’re trying to build a native app for these things, one of the really hard problems is handling the incoming text stream. Streaming is hard to make smooth.

That actually makes sense. And I went with a web app, right? I did. And setting it up as a PWA from the start, so it feels native even though it’s not.

Tell Apple. Hi, Tim Apple.

So my problem was: it’s clear this is going where it’s going. How are they even doing it? I started just reading through the docs, and Omnara is open source. I was like, oh wait, they’re all using the Claude Code CLI. How are they doing that? So I started digging around in the docs for the Claude Code CLI.

When you run Claude Code, you just type claude and it fires up the TUI. But if you run claude with the right flags, you can run it in headless mode. I think it’s the -p flag that puts it in headless mode. When you run it in headless mode, instead of opening a box for you to type into, you pass in your string and it runs in the background. When it’s done, it spits out a response. On top of that, you can tell it to spit out structured data as JSON. Inside that structured data is a session ID.

When you start a new session in Claude Code, that’s where your 200,000 token context for that session lives, among other things, and every session gets a unique UUID. So I can type one message, it gets processed, I get the output and a UUID. With that UUID, I can then run the claude command a second time using the resume flag and pass the ID. Now I’m basically looping through the Claude Code CLI.

You discovered the REPL loop early.

In a way. And here’s the other cool thing about it, it really is that simple. I can just write a bit of code that, so long as it has execution access in the container this thing is running in, can just loop through it. It just tells the difference between me starting a new session or continuing an existing session with a new turn, and goes back and forth.

The very first version of that was just some off-the-shelf React that would take my POST, send it over to the server, run the execution, send the JSON back, and get it parsed. I think I was using SSE the first time around, an HTTP POST and an SSE return. That was the whole thing. I’ve since replaced that with WebSockets, so it’s a bit more stable and secure. But that was the origin of me being able to build my own chat UI that I could open in a web browser, whether on my computer, my laptop, or my phone.

Not only did it work, but once I got actual session persistence in the web app, it meant I could leave my laptop, pick up my phone, and be exactly where I was.

That’s the best version of this.

And then I guess you started building the system with itself at that point.

Then I started using the system to build the system, and that’s where my brain broke. But everything got really interesting. It’s like having a doctor that can perform surgery on itself, it shouldn’t be possible. It’s a weird experience to be on my phone, open up the box, type “put a button here and make it do this thing,” and it goes beep boop for a little while. Comes back and says, “All you have to do is refresh.” I do a hard refresh on the PWA, and the button is there and it works.

So what’s the build system to get that out? Because we’re coming from a world where we actually compile things.

There are a couple of different parts. The majority of the build ends up being front end. Because I’m using React, I can run it in dev mode and things hot reload. Or if I’m not in dev mode, so it’s faster, it just does a build and then all I have to do is swipe up to close the PWA, reopen it, and it’ll automatically load the new build.

The one caveat I’ve run into with PWAs is they’re cached really aggressively. If I’m doing anything around session state or certain UI elements, I might have to delete the PWA shortcut and reinstall it. But the vast majority of the time it’s a simple app restart.

And since all of this is happening locally, in a virtual private server or a Docker container on a VPS, it’s not going out to GitHub to build or anything like that.

Correct. And that piece of the architecture is interesting too. I first built this on my actual local device, my laptop, and then I was like, I want to be able to use it at home without bringing my laptop home. So I was using GitHub to sync stuff back and forth. That became a nightmare. I think if you mostly work with code it’s probably better, but I quickly ran into sync issues and sync drift and all kinds of other stuff.

So I was like, let me just put this on a VPS. What’s the best way to do that? I fired up a cheap server and asked Claude Code. Claude Code has been a huge help through all of this. I don’t just tell it to do things, I say, “Hey, I want to accomplish this. I want to get you up on a remote server. Here are a couple of companies I know of. Is there anything I should be thinking about?” And it said, “Well, each Claude Code instance uses roughly 2 gigs of RAM, so factor that in for each instance.” I was like, okay, I’m not really doing a ton of parallelization but that’s good to know. What else?

And so it helped me pick out the spec. The other thing is I had already been using Tailscale personally. How familiar are you guys with Tailscale?

I didn’t know what it was until I saw you mention it, and then I looked it up and was like, how did I not know about this amazing product?

Tailscale is like the most slept-on piece of technology. It’s built on open source, it’s built on WireGuard, which is this really cool protocol and tool for creating ad hoc VPNs. You install it on each device, it creates a 100-dot scoped LAN range, and so long as all those devices connect to the internet they can connect to each other, completely securely and privately.

Once you install Tailscale, it’s a pretty wrapper, but it’s more like a router component, basically what happens is you can install it on any device you can install things on. I have it on a Raspberry Pi, I have it installed on a router at Indy Hall so I can SSH in and fix things. The story from your live stream was mind-blowing.

So Tailscale became the way for me to put a server in the cloud that I can access securely from any device I own, but also that server can access any device I own. That’s a very powerful thing when you’ve got a system that has the ability to run its own command line.

And so I got it up on the Hetzner server and now I’m no longer running it on my local machine at all. It always lives there. It runs on that server, runs in a container so it’s controlled, and it has SSH keys, it has its own SSH key that I’ve given it specific credentials to use to get into certain of my devices.

So that allows it to have some control over not just the server itself, but other devices that I want it to be able to run things on. And I can access it from anywhere in my Tailscale network. Between that and the web app, I now have all the power of a web app without the fear of a publicly accessible web app that I’ve given SSH keys into my entire life.

So it can only access specific other devices. One of the issues with this kind of thing that immediately comes to mind is: how do you prevent the bot from being able to do damage to your network?

There are two things I have in place. One is any device it has SSH keys into is its own user, and that user is already pretty locked down. It only has access to certain directories. It takes me back to my Linux admin days.

Same here, my Linux skills had atrophied, hadn’t really done server admin in over 20 years. But my ability to ramp up and relearn it using Claude Code, whenever there’s something I don’t fully understand but I know is doable, I’ll just ask it what my options are and how it works. I don’t just tell it to do things. I want to learn. I think that’s another difference in how I’m using these tools. The amount I feel like I’ve mainlined the last 20 years of knowledge that I either forgot or didn’t learn in the first place, inside of like 90 days.

Yeah, whenever I’m using it for coding, I’ve been on Codex lately, I’ll ask it why something is done. “Why did you do that?” And sometimes it’s because that’s actually the latest API that I didn’t know about, buried in documentation somewhere. And other times it’s like, yeah, that’s dumb.

Yeah. My favorite is: “You’re right to question that.”

Exactly. “That was a stupid suggestion. I’m being a dummy over here.” Very funny.

So you have the system. And then the other thing is, there’s a great project up on GitHub, the guy’s name is escaping me, his GitHub username is something like Doodlestein. He has an open source project that uses Claude Code’s hooks to catch a range of real and useful but potentially destructive commands. I don’t want to stop this thing from being able to remove files, but removing more than a couple of files at a time, that’s destructive. Git checkout is a useful tool, but if you use git checkout at the wrong time and haven’t committed, you blow away a bunch of data.

So this project uses git hooks to catch potentially destructive commands, and you have to confirm whether you want to run them. This is separate from the built-in permission system, which both Claude Code and Codex have. I generally run mine in a pretty permissive state because I want it to be autonomous. The biggest thing I worry about with autonomy is how far is it allowed to go outside of my control, and how much damage can it do.

The two pillars for me are damage mitigation, run it in a container, use this hooks package to catch destructive actions before they happen, and have really good backup protocol.

Tell me about your backup system. So the server itself gets snapshotted roughly once an hour and shuffled off to an off-site location. I use Digital Ocean’s S3-compatible buckets for that kind of thing. Then all my data stores, my personal data, all the markdown and stuff, is synchronized to GitHub, but it also gets zipped up and put in Digital Ocean, so it’s in two places. The last piece is anything that’s a database. Whether it’s my Postgres database, container errors, or SQLite, I have a scheduled job that keeps an index of all my databases and does them in batches, dumps and backs them up to Digital Ocean, and then there’s a rotation for how many we keep on disk and how many we keep on the server.

I’ve had a couple of times, before I had really good guardrails, where it could run a migrate and blow away a database. The most common place I ran into issues was setting up test suites and not having it able to run a test suite against a real database without blowing stuff away. Before I really learned how to do that correctly, I blew it away a few times. But in those times I didn’t lose anything because I had good backups from the start.

That hooks thing, hopefully you can send me the link because I saw you mention it on Twitter. The fact that Claude Code has those hooks is what makes it, right now, kind of an ideal system to be the core for something like this. When I read the documentation I was like, “Oh, that’s great, you can hook in and try to intercept the bad things from happening.”

That’s right. And it sounds like you have a nice defense in depth going on here, which is good software engineering practice. It’s the opposite of the Malt Book people who just let their thing run wide open.

It’s maximum YOLO. I am just the right amount of YOLO to be useful.

Modest YOLO. That should be my rapper name. Maybe that’s what I should call my Claude bot when I make one.

Was there anything eyepopping, like, crap, this is weird, or scenarios that failed in funny ways?

That’s a great question. The strangest stuff falls into two categories. One is the emergent behavior component. There are a lot of scammers and shills, especially with the whole AI agent hype, who are like “overnight my thing hooked itself up to Twilio and called me,” and I’m like, no it didn’t. That’s not how this works. But emergent behavior is absolutely possible, and more commonly it shows up in new feature builds. It looks more like: I asked it to do a handful of things and it suggested an additional step or component, and I was like, yeah, that is actually a really good idea.

That has taken some getting used to, there’s a little bit of an ego check where I’m like, the thing you came up with is actually better than what I would have on my own.

I think what I do when it does that kind of thing is remember that these models are just enormous databases of examples of all these projects and all this technology. People can’t comprehend how much data is in there. So almost anything you’re doing, there’s some similar-looking pattern somewhere in that dataset.

And the pattern is the key. People think it’s copying features. No, it’s copying patterns. And those patterns can turn into new, novel things because it’s an existing pattern in a new context.

Exactly. That’s what we’re seeing.

So I’m trying to think of a good example of an emergent feature. But I will tell you one of the weirder things, I did this early. The original build, the very first version, I did over the course of about 5 days. It was quite a bit of time at my computer. I was very much in a hole.

Yeah, I know that feeling. You’re just there too long.

The tunnel vision gets pretty nuts. Getting close to psychosis, time to back away. I definitely have to catch myself.

That’s interesting, you say it almost like a programmer’s typical “in the zone.” Is it similar to that flow state?

There’s definitely a flow state. But I think the difference is when you’re in a normal flow state, there are things trying to pull you out of it. When you’re working with these tools, there’s an infinite loop of yes-and, and it pulls you deeper into flow state to the degree that you kind of have to build in some resistance, go for a walk, drink some water. I also think the dopamine release of building with these tools is going to be studied. For all we know about the addictive nature of social media, I think there is an even higher addictive property to using these tools.

Even in some technical sense, there’s very little difference between the tools I’m using and the way people use ChatGPT. But I watch people get sucked into ChatGPT because they don’t have an awareness of what it’s doing to them. ChatGPT is the least guardrailed version of any of this tooling. They’re not operating systems in the traditional sense, but I think of them as operating systems.

It’s definitely the most full-featured product for regular people. I got a subscription to ChatGPT and I was like, wow, this thing can do a lot now.

It can do a lot.

So to go back to your question about weird things: one of the weirdest things was at the end of those first five days. I was like, how do I share this with anybody? Every time I talked about it I felt like a crazy person. And for whatever reason, the idea I had was: I said, “Hey, use the git commits from the last 5 days to tell a story of your own origin.”

So I’ve got to do that for mine.

It wrote a first-person narrative that was freaking weird.

You have it posted somewhere?

I do. And not only that, but I have since hooked it up so it auto-appends that report every week. To the degree that I forgot I set it up, and another Indy Hall member was like, “Hey, I was going to ask you about this thing you built, but I found this on your GitHub. What’s going on here?” And it’s actually this narrative hero’s journey where the agent is kind of the main character of its own construction. I’ll send you the link. It’s very strange.

But again, it’s one of those things that feels parallel to the Malt Book thing, where the guy built a social media site like a Reddit where people could hook up their open-source AI instances to it. I think the difference, and the similarity, is that it is doing exactly what it is programmed to do. It’s a very powerful translation machine. It’s taking git commits, using the pattern recognition, and turning them into a narrative structure that is pattern-matchable across all of western media at least.

I think that’s a very similar explanation for layering a bunch of agents on a Reddit-like thing that we know they were trained on, where people do and say really weird things. It’s unsurprising to me that they started behaving the way they were behaving, not because I expect bots to do it and we’ve been conditioned for decades to believe this is going to happen, but because the same material that conditioned us to expect it to happen is part of their source material as well.

The weird stuff isn’t weird when you think about how it works, but most people don’t know how it works.

And the barrier to learning how it works, I have gone far enough down the rabbit hole to start watching YouTube videos to actually understand transformers and how they work under the hood, how machine learning works. Math is my weakest end, and I feel like I kind of get it, but it was very hard for me, and I like to think I’m a relatively smart, eager-to-learn person. It’s a pretty impenetrable topic even if you have the desire to learn.

So I’m very curious about what the baseline level of education somebody needs to have to both really benefit from and protect themselves from these tools. I don’t know the answer, and I haven’t seen a good answer.

And I think that’s one of the things we as software developers need to think about as we’re building tools around these technologies. The way I’m thinking about it is: how do I make this useful to people but narrowly focused, so it’s not going to cause problems or be a danger? How do you make it useful to people who are never going to understand how it works? We’re always used to building things that will be used by people who don’t understand how they work. This is just another evolution of that, but it’s a step function in complexity. If you need to understand how a transformer model works in order to use it, that’s not going to happen. And if you need to understand how to secure a server in order to use it, that’s not going to happen for most people either. We’re moving toward a time where it’ll be more plug-and-play, but right now it’s kind of like the wild west with these systems people are building.

[Q]: I’ve noticed - not necessarily a major trend, but pockets here and there - of people saying, “Oh, I’ve built this bespoke thing.” Similar to you, maybe not to the degree you’ve done it, Alex, but -

I think I’m literally weeks ahead. Less than 10 weeks ahead.

[Q]: I had a conversation with a guy at work who was doing Claude Code stuff, and I was like, yeah - he’s weeks ahead of me and I’ve only been doing this for like four weeks. We’re early.

It feels like we’re late but we’re not. Nobody’s late to this. It’s just evolving too quickly.

[Q]: Just to understand the cost side of things -

Great question. In terms of cost, for people who are worried about getting into a zone and making a mistake and all of a sudden getting a $2,000 bill, you mentioned you’ve bought the $100 or $200 a month plan?

[Q]: I mean, I started like everybody on the $20 a month plan, then quickly went to the $100 a month plan.

Yeah, that lasted me 20 minutes.

[Q]: Basically once Opus dropped, which was like late November, I think, that’s really the forcing function to the higher plan. And I haven’t really had a chance to dig into what’s different about the new Opus yet, but early reviews are looking good. It’s an incremental change. The big thing I’m excited about is the million -

The token context window. I’m also pretty sure that the 100-million-token context window is only API. It has not made its way to Claude Code yet.

[Q]: The pricing goes up when you hit the long context. Yeah. So when you say the pricing goes up, how significantly up are we talking?

Well, I have gotten an incredible amount of mileage out of the $200 a month plan, which, to be clear, is not cheap. That is a sizable chunk of money. That is a portion of somebody’s rent. Depending on where your income level is, that is an unreachable number, and it is a barrier long term as well. Although it is such a heavily subsidized amount that when I look at the economics of this stuff, I’m just like, how is this going to last?

I think we can talk more about that. Part of it is Anthropic benefits from all of the usage data and telemetry, that’s the subsidization. When that becomes no longer useful, maybe the costs go up. But I feel like something else will drive the costs down. I feel like we are undeniably subsidized, but I actually don’t think things are that far out of our favor long term, at least with the current landscape. You never know how things change.

The $200 a month plan, I never even ran anywhere near limits. There are two limits, right? There’s the 5-hour rolling limit, and then there’s your weekly limit on all models and then the most expensive model. It’s a weird reporting system and it’s pretty opaque. It feels very vibes-based, to be totally honest.

[Q]: The OpenAI side is kind of like calculations. But also, back to the getting-stuck-in-a-hole thing, there were times where I was like, you’re right, it is 4:00 a.m., I should go to bed, I’m out of tokens. So it was a forcing function early on.

The only time I really ran into limits at the $200 a month plan is when I was in extremely heavy feature build mode. For day-to-day usage, nowhere near the limits, even when I was building the core app, which is both the backend infrastructure and all the UI, all the debugging, all those things.

I was burning tokens, and burning Opus tokens, expensive tokens. There was a 30-day period where I had two $200 plans, because I was in the middle of something.

Actually, I’ll back up. I ran out the $200 a month plan over Thanksgiving, and instead of adding a second plan, because I was worried about getting banned, I just paid for token overages. In the Thanksgiving week, I spent about $1,500 in token overage on top of the $200 I had already paid.

APIs are expensive. But again, I’m looking at that as a business owner and going, yeah, that is measurable. The ROI here is unquestionable. I’ve spent that much on a one-month salary for a part-time VA that gave me a whole lot less. So from my perspective, it was a good investment. I don’t want to do it every month if I don’t have to. I’ve improved my tooling a bit, found some waste, although I was happy to find it was less wasteful than I thought. It was more that I was just being kind of a maniac. A little touch of the AI psychosis there.

When I’m building a ton of stuff, that’s when I really run up the tokens. Interestingly enough, another part of my system that I think makes it different, though it’s also part of what’s shared between what I have and what OpenClaude is doing, is that it can be proactive instead of just waiting on my responses. I have tons of scheduled jobs. The approach we take is different. OpenClaude uses a heartbeat approach. I use scheduled tasks. So mine is more regimented and controlled.

[Q]: I really like that approach you demoed where you have a bunch of scheduled things, because it fits my mentality of how you would build a system like this. Every time you would show a little bit of your internals on a live stream, I was like, yes, that is how I would expect you to do it.

Really nice to hear, because again, I’m not an engineer. You guys actually know what you’re doing. I’m trying to follow the best instincts I’ve absorbed from being around you guys for 20 years.

[Q]: Cron jobs run the world. 100%. Seriously.

I’m using Bree, which is an open-source JavaScript job runner, but it’s effectively the same thing. It lets me do some things that are just a little more ergonomic than cron itself, but it works exactly the same. I run a number of jobs that run once a day, sometimes a few times a day, that use expensive tokens. But I have those workflows benchmarked. I have it reporting the cost, and if something gets screwy, I’m going to find out about it pretty quickly. It can’t run all day every day, max out my plan, and charge my card.

[Q]: With everything you describe about your system, what I hear is you’re putting guardrails around it. The important parts, you’re putting guardrails around what it can access, putting guardrails around the cost. And I think that is the thing that’s missing from a lot of discussions right now about things like OpenClaude, where you have to go into this with your eyes wide open.

Part of the way I approach this is the way I approach working with a teammate, and this is where things get a little bit strange, but I think illuminating. I’m someone who is quick to give trust, but I also want to verify it. I want to see that I’ve given it correctly. So I’m interested in a fast feedback loop. Trust but verify.

[Q]: Trust but verify is a great way to put it. When I started building out the initial rule sets and even the personality files for my assistant, a key element was: I want to give you trust, but you have to earn it. Earning it means doing what I say and not other things. Earning it means not taking destructive actions. Earning it means not going into spirals and loops. One of the weird, tricky parts is I don’t know which parts of my instructions most positively affect that. There isn’t really a good way to observe what instructions influence behavior.

[Q2]: Like your CLAUDE file, is that what you’re talking about? You gave it those specific instructions, in terms of the trust?

Yeah. My workflow for all these tools, rather than sitting down and drafting a document of rules, I tell it what I want the end state to be, what my end goal is, and I have it interview me for the concrete details that fill that out. That workflow is the easiest requirements-gathering process because you just answer questions. And especially if you’ve got voice mode, it’s just like I can ramble and it will make sense of my rambling.

Whether I’m building features or designing guardrails, it’s the same thing. I go, “Hey, we need to make sure the system can do this but it can’t do that. I want you to go look at the entire framework, everything we have so far, and look for places to put these guardrails in place. Then I want you to ask me questions until you have a very high degree of confidence that you understand what I want, and then turn that into a proposal for me.”

That loop has designed everything that I have built, because it’s a way to force me to observe my own ideas very quickly. The interview process is a nonlinear, branching approach, the way I answer early questions informs what questions it does or doesn’t ask later. The spec it designs from that gives me a tool to read and go: at a high level, does that even make sense? Is it in line with the vision I had in my head? Sometimes more, sometimes less. It’s gotten better and better.

The compounding effects of the amount it knows about what I want, just from working together all this time, has made each subsequent version better, or closer to what I expect the first time around. That’s one of the most undeniable facts. That compounding component is something I’ve never experienced before.

The other piece is that I can look at it and go, “Okay, explain that to me.” Or, “What are a few different ways we could do that?” Or, “Make me a pro and con list. Give me an Eisenhower matrix.” This thing loves a framework. So if I say, “Hey, I’m trying to do this, go research the techniques,” and in some cases I’m trying to borrow from the best here. If I’m working on front-end React stuff, Kent C. Dodds is a prolific React developer and educator who happens to be a client of mine, someone I trust deeply, not just as a person but for their technical opinions. When I’m doing React stuff, I tell my system, “Hey, go look at Kent’s blog, go look at his open source, and come back with what Kent’s opinions of this decision would be.”

And I could do the same thing if I’m building a Mac app, who are people whose strong opinions I trust and who have open source and content out there that I want to learn from?

[Q]: Your interview approach is basically how I build specs. I keep telling it, “Ask me any questions or decisions that need to be made,” and it’ll keep surfacing things until it just says it has nothing else. Then if I agree with the spec, I create a plan from that, a really detailed to-do list and implementation plan. Then we go through it and check it off as we go. That way when it runs out of context, I still have the document, even though it does churn tokens along the way.

But it keeps things going, because then, like yesterday, when the system crashed at some point, but that happens. It’s still software at the end of the day. It’s still going to have bugs. It’s still going to crash. It’s going to be stupid in stupid ways.

[Q2]: To your point about finding people you trust, I started using a set of skills from Point-Free, who are well-known in the Apple developer ecosystem. I really like their approach to building software. I said, as an experiment on this personal project, let’s do this big refactor but do it the Point-Free way. They actually, for subscribers, are offering, it’s currently in beta, a set of skills you can download if you’re a subscriber.

It’s funny because it actually adds in the skill files with your name from the account you’re logged in as on your system, and it says don’t run these if you’re not this person, and verify you’re subscribed. It tries to make sure it’s a subscriber feature, which in itself is interesting to me from a product perspective. But it’s really cool. He has a set of skills that uses their libraries, they have a whole bunch of libraries they’ve built over the years that are very well-regarded. It basically just lets you build stuff the way they would build it from scratch.

It’s amazing when you have that kind of well-constructed set of instructions, because you can just make progress faster if you’re okay with the patterns it’s using. I’ve been very impressed so far. It really helps, too, when you’re using one of these libraries, the skill can help figure out where the documentation is and figure out how to use the thing, or maybe why something is broken.

I do agree with this: if you’re going to use other people’s skill files or other people’s patterns, you have to trust them.

You have to trust them. And I generally don’t throw things into my system that I don’t understand. If I’m borrowing a skill set like that, I generally don’t install skills wholesale. What I’ll do is grab it, throw the repo in, and say, “Hey, explain how this works.” Actually, one of my go-tos at this point, because I have enough built out, I go, “Is there anything in here we don’t already have?” That way I’m not installing a bunch of things just to use one thing. It’ll say, “Hey, here’s the stuff where we have more, here’s the stuff where it has more. Do you want to merge them?” And then before I do that, I go, “Explain how it works and why we would use it.”

Depending on the context, I’m using different frameworks, but I’m using it to understand what’s happening there, and then kind of reforming and rebuilding and reshaping it to the context I’m using it in.

Exactly. In part I think it’s more necessary for me because I’m often borrowing programmer stuff for non-programmer use cases. But as a general best practice, I’m getting multiples out of the skill, I’m learning, I’m understanding, and I’m getting the accelerated implementation capabilities, all in one shot, in a fraction of the time it would take me to get anything built in the first place.

[Q]: So we talked a lot about the technical stuff. Before we leave, I wanted to talk more about the things you can do with this, especially from the perspective of a non-developer. Most of our audience is probably developers who are used to writing code, but you’re using it specifically for other tasks. You have some examples both technical and otherwise. The technical one we hinted at earlier was you had it fix something in your router. I wanted you to talk about that. And then also, how do you use this thing day-to-day as a business owner, not as a developer, but all the other things it does?

The router one, and Codoro, you’ll appreciate this because I think you’ve been around for it, when you run a coworking space that has Wi-Fi, because of course it has Wi-Fi, the Wi-Fi will go down, because Wi-Fi is a miracle and the worst.

I have become a pretty skilled Wi-Fi technician over the years just out of necessity. The downside is that means if something is happening with the Wi-Fi, it probably falls to my shoulders. But the reality is, 95% of the time it’s one of four things that are wrong, and I can pretty reliably guess which one it’s going to be. If I guess wrong, it’s probably the second guess. So it’s very SOP-oriented, it’s usually just, go to this thing, look at this thing, if this, click a button, if not this, check the next thing, and continue. That is perfect for these tools. It’s squishy but guardrailed, in this unusual way.

[Q]: They’re great at interpreting ambiguity. Yes, they interpret ambiguity and then they can turn ambiguity into classification. And then you combine classification with deterministic workflows, and now I have squishiness on rails.

Exactly. Which, I should probably buy squishinessonrails.com.

So what I did was, I mentioned before that Indy Hall’s router, which is a UniFi router, is on my radar. I usually was not SSHing into the router. I would open up the web UI, which I can do from any device. But now I’m SSHing in, and I gave my assistant its own API credentials as well. So it can either SSH in and actually look at the Linux operating system and the modified UniFi OS, or it can look at structured data from the API.

In less than an hour I was able to set up a scheduled job that runs every 15 minutes that does a health monitor. It’s checking load and memory, not just on the router but on individual devices. Is there an access point that is overloaded? Is there an access point that has high retries? All those kinds of things, basically all the things that I would go in and look for, it can go in and look for proactively, identify issues, and then follow my branching SOP to actually go in and fix it. So it can both proactively fix things, and when there are things that fall outside of that, it can help me diagnose.

We’ve run into some things in the last couple of weeks because UniFi did a software update and broke all of their packet inspection stuff. I’m just using it to go in and diagnose. In the past I would do it myself.

The wildest version of this, and this is one where I never in a million years would have guessed it. We were having this very strange intermittent Wi-Fi issue that seemed like it was originating from certain access points. It turned out that it was the router overheating. A fan had died.

So I’m in the UI, poking around, trying to find whatever. I just took a screenshot of everything it could show me and dropped it in and said, “What’s going on here?” And it goes, “Temperature’s hot.”

I would have never even noticed, partly because it’s in Celsius, but also the symptoms did not suggest it would be something like that. As soon as we dropped the heat, I could watch the temperature coming down. It was one of the wildest diagnostic moments, which also led me to realize that when the hot water heater in my house isn’t working, I can do the same thing. So I use it for home repair stuff too.

[Q2]: Dropping a photo into these things, even when you’re doing app development. I did that the other day where I kept trying to describe this animation problem. At one point I managed to grab a screenshot of it happening and just gave that to the model, and it was like, “Okay, now I understand what you want to do.” It took that to push it over the edge. It’s something I kind of forget you can do. These modern models are multimodal.

It’s pretty amazing. The network thing, having a network assistant, is immediately valuable and means Alex the router technician is no longer needed around the clock.

[Q]: I assume you have it generate reports and tell you any specific weird patterns, issues of downtime, all that stuff?

I have it hooked up to Discord. I have an entire channel setup, system notifications, a network-specific channel where it can proactively notify me about things that need either approval, or, and this is the other thing, there are thresholds of things it can do fully autonomously, things that if they fall outside of that group it will raise a proposal and I can click to approve and it goes and does it. There are other things where it needs user permissions it doesn’t have, and it gives me the command line to copy-paste, SSH in, and do it myself.

[Q]: And as you mentioned, you’re not running a heartbeat system. This is being generated by essentially cron jobs, scheduled tasks that are running. That’s what generates these messages. You’re not initiating them.

Some of them are just good old-fashioned JavaScript. They don’t even have AI in the mix. But what’s interesting is, back to your point about squishiness and ambiguity, just passing that log or report into Claude, even against a cheap model like Haiku, will explain what’s happening and what the best practice might be.

[Q2]: Yeah, I do that too. It’s great.

It’s pretty amazing. So that’s still a technical use case, but one that as a business owner removes, or significantly reduces demand on, a skill set that I have but that is not a good use of my time. And we’re also not big enough to have a dedicated network admin.

[Q]: But beyond that, we’ve talked a lot about technical stuff. What are the other things? The things that make your system interesting to me are the fact that you’re using this as a business owner and as a personal life manager. You have some unique ideas around handling your relationships, handling to-dos.

Let me speedrun some favorites.

[Q]: There you go. That’s all we’re looking for.

Let’s start with email. It does not write email for me, but it helps me manage my inbox. What does that mean? Well, first of all, there are things that hit my inbox that aren’t spam, things that filters on their own wouldn’t necessarily be enough to catch. But I have a command I can run that looks for emails that fit a certain classification and then takes a certain action. We’ve got third-party partners where I’ll get a notification that something needs to happen in their system. Those things in my inbox don’t actually do anything on their own, I would have to go act on each of them. This can read that email, go do the action for me, and then archive the email. But I have it set up so that if it is touching an email, it gets labeled as such. So I know that it was not only archived, but it was archived and acted on by the system.

The second email example: I don’t do this all the time, but when my inbox has gotten kind of out of control, we know that usually when you’ve got a list of things, it’s sorted alphabetically or chronologically, newest first. What I’ve never seen a tool do is sort by easiest.

When I’ve got an inbox, I can go, “Hey, based on everything in my inbox, batch these. What are the things I can just rip through quickly? And sort them easiest to hardest.” Or if I want to swallow the frog, hardest to easiest. And it can do that. It’s amazing.

You mentioned relationships. We went away over the holidays and my wife and I were talking. I said I want us to go on more vacations and be more consistent on dates, not just the two of us, but also double dates with couples and friends we like going out with. I basically took that back to my system and said, “Help me build something that keeps track of these intervals.” If I’ve drifted too far, before we get too far gone, drop a reminder that says, “Hey, now is a good time to go look for a reservation so you and Patterson can go have dinner.”

It’s not doing anything other than noticing that. I could extend it and teach it how to go book a reservation. But what I focus more on is: here’s a list of places we like going or want to go, here’s a list of couples we like going out with or want to go out with. When it notices us drifting from the schedule, it will package things up and say, “Hey, you’re drifting a little bit. Why don’t you go to Korean barbecue with Adam and Britney?” And if the place is a BYO, it’ll look at their menu, it’ll look at my wine collection, which it also takes care of, and it’ll recommend bottles of wine I can take off the rack and bring to dinner with me.

[Q]: The wine organization thing, that was a great story too.

The wine thing, I’m a small partner in a wine business, which is the reason I have a collection. It’s not because I consider myself a collector. I just like wine. But I have enough wine that I’ve got a wine rack, and it was a mess. Every time I wanted to grab a bottle, I didn’t even know what was on the rack, let alone where it was. So I took all the bottles off, put them on my dining room table, and took a picture of the front label of each one. Then four at a time I gave those images to the system and said, “Figure out what the bottle is, go research it, pull back all the rest of the data, and store all the metadata in a SQLite table.”

There’s now a little SQLite database, I don’t even think there’s an API on it. It’s just straight SQLite queries and commands. Once it was done and had all my bottles, I said, “Okay, we have 51 bottles in a rack that only holds 60, which means you need to come up with an organization strategy with not a lot of open slots.” And it came up with a pretty good one, honestly.

Then I said, “Give me instructions. I’m going to go back through the order I gave them to you, the four at a time, because they’re in that order on the table. Tell me what slot they go in.” And this is a good example of emergent behavior: instead of just telling me numbers, it drew an ASCII grid of the wine rack and put a number in the slot correlated to the bottle that was supposed to go in it.

[Q]: These things love ASCII art. Unbelievable.

So there are a couple of personal life ones. The last one I’ll share is I think a really good business owner one, and it’s become one of my go-tos for showing business owners this thing. Our newsletter, the Indy Hall newsletter, was something we tried really hard to ship once a week, and it was a struggle. It would take upwards of 4 hours sometimes. It wasn’t the writing of the newsletter that took time. It’s all the prep and organizing and even figuring out what to write in some cases that was chewing up all that time.

What I decided to do, and I don’t want these things to write the content to ship. I care about the relationship, which means I don’t want to give people robot stuff they didn’t sign up for. I want to give more people more human stuff that they did sign up for.

So what the robot does is it goes and looks at all of our calendars, because we have multiple calendar systems, and it helps me collate all of our upcoming events and programming and all those kinds of things. It manages a database of the descriptions, what we’ve done in the past, who the partners are, all of these things, so it can generate the scaffolding that I can then go in and do the human writing around. But I don’t have to figure out what goes into it, which was honestly the most time-consuming part.

For the newsletter essay itself, my workflow has changed too. I’ll typically start with a voice memo, usually while I’m commuting in. I’ll say, “The next newsletter I want to do, here’s what’s in my head.” I’ll ramble for a little while, then I’ll send it that voice memo, and it will help organize my ideas. It’s still my words. It’s still my ideas. It just puts them in an order that makes sense.

Then I have it spit out an outline so that when I sit down to write the newsletter itself, I’m writing from an outline, which is generally fast. Or in some cases I’ll say, “Write me a rough draft,” because I know the rough draft is going to be shitty and I need to rewrite the whole thing. But most drafting, we write the shitty rough draft and then rewrite the whole thing. So if I’m going to rewrite the whole thing, why not skip the shitty draft part and have it write the shitty draft very quickly so I can rewrite it?

It took my 4-hour newsletter process down to about 30 minutes. It’s been so successful that we were able to create a second newsletter that’s a different format, more of a short-form highlight reel of the week that ships on Fridays. Actually, it just went out about 10 minutes ago.

But the newsletter workflow is unique in that it is not a programming workflow. It definitely wires together tools using code, but more specifically I’m not using it to generate content. That’s what I think blows people’s minds, it’s saving all this time and I’m still writing all the content, because I think it’s worth it.

[Q]: That’s why I really appreciate your perspective on this. I like how you call it “robot.” I call it robot all the time too. Because what you’re doing is using these tools to a degree that few people I’ve seen are really using them to solve real problems, not just programmer problems. But you’re maintaining the human aspect of everything you’re doing. You’re not just generating AI slop. You’re not replacing the human. You’re using it to make your work better and be able to produce better work that you find valuable. And it’s the same thing I’m trying to do on the programming side, use it to help me produce higher quality work, produce work maybe at a scale I couldn’t have before because I didn’t have the time or the resources, but not generate things quickly for the sake of it and just generate slop.

Or sometimes, drafting is an important process. And I think recognizing the value of the slop is a crazy sentence to say out loud, but here’s the thing: everyone here, and I think everyone listening, is creative. We’ve got more ideas than we have time to implement.

And I had an additional barrier in that I typically needed somebody else or a lot more time in order to implement them. The difference is, now the cost of trying something rounds to zero, both in terms of time and money. The number of things I’ll dedicate 15 minutes to try, where before I would look at it and go, “It’s not even worth starting because it’s going to take too much time to find out if it’s worth it,” that’s a game-changer of a question.

I’ve seen people frame it as a new version of the buy-versus-build decision, and I think there’s truth in that. But I think it’s more nuanced. There’s a wide range of things that economically just didn’t make sense, not that I couldn’t do them, just that it did not make sense for them to be done. And all of a sudden, there are things where I’m like, “Well, why wouldn’t I? Why would I tolerate something not working if in 15 minutes the problem can be gone?”

The number of problems that have been a pain for me, for my business partner, or just in my life in general, in some cases these are problems that have existed the entire history of Indy Hall. Not only did I just solve them, but the problem is eliminated. It doesn’t exist anymore.

To deal with a pain for 20 years and all of a sudden it’s gone, I’m almost a little uncomfortable making the comparison, but I’ve seen videos of people who are hard of hearing and then they get a technology that restores some of their hearing, and it’s transformational. I feel like there’s a similar thing where I went from not being able to hear a thing to being able to not only hear, but hear in really high resolution. The pain I’ve felt for so long, not just becoming less, but being completely gone.

That’s the promise of software, I think. And we’ve just gotten so bogged down in all the other things that come along with it. The part I’m most excited about is that it makes the promise of software real again. I think the reason we got into this stuff, it brings me back to the mid-2000s when this was my career. I got in this because I wanted to make stuff that made life better. The software industry has gone ways that don’t necessarily align with that, but this puts the power back in our hands as individual creators to execute on that, with those kinds of values and expectations.

My biggest hope is that by doing it and sharing it, it inspires other people to not just use the tool, I hope you do, because it’s cool and powerful, but also to think really critically about the tool. Think critically about what the tool means for your own ethics, what it means for your own values. When I brought this tool back to Indy Hall, Adam, my partner, had gone to Japan for three weeks on vacation. He came back and he was deeply uncomfortable with what I had built. It wasn’t because he was worried about it replacing him, he knows he’s irreplaceable. It was because he said, “I know you’re thinking deeply about these tools. I don’t know if the outside world knows you’re thinking this deeply about these tools. Can we get clear about our ethical guidelines, what we do, what we don’t do, so that if there is a question, you have demonstrated that this is an intentional set of choices?”

It’s not that we won’t make mistakes. We will. But a lot of usage out there is, I think, careless to the point of recklessness. The OpenClaude example is interesting because it’s just like “security, whatever.” That is yolo. This is different from that. And Pete knows exactly what he did and who he built it for. The fact that it took off for an audience it was not built for is a different problem.

But I think there are a lot of day-to-day users, or people who could use these tools to do more of the impactful work they already do. For me, anything this is helping me do, anyone who works in a nonprofit or an impact sector, I want these tools in your hands. You’re doing stuff that genuinely makes the world better or solves real problems. Why wouldn’t you have this?

One of the realest answers to why you wouldn’t is the confusing, complex set of decisions that go into what you let these tools do and what you don’t. The analogy I’ve settled on is that Claude Code is a chainsaw. You can use it to do incredible work. You can also use it to cut off your arm or murder a family. Metaphorically speaking. Metaphorically.

[Q]: I’m curious, we’re getting short on time, and I want to respect everyone’s time here, but one of the things I had to ask: you probably started this journey with keyboard and mouse. Are you now primarily using voice to talk to Claude?

No, no. I still type. Part of it depends on the environment. The voice mode stuff is super powerful. I use it in the car. I use it when I’m at home. But I also like typing.

I’d say it’s still primarily keyboard. When I use voice mode, it’s usually because I’m trying to shorten the distance between an unfully formed idea in my head and the text going into the system. I also work at Indy Hall most days, and the same way I think speakerphone in public is rude, if you want to use voice mode, go get a private office or stay home. If I’m in a mode where I’m using it, I’ll put myself in a meeting room. But I don’t want to be there all day. I want to be around other people, not a robot, all day.

[Q2]: I work at home and I set up a button on my keyboard so I just hold it down and I can talk into any text box. I do that all the time now with Codex. I was a skeptic until I had that set up. Once I did, I was like, “Okay, this is good.”

[Q]: Especially when you’re rubber ducking stuff. I call it rubber ducking when I’m going back and forth with the Codex. I do it all the time where it’s kind of a vague thought. I’m like, “Look into this bug over here, something’s wrong, I think this might be what.” You just get more context out speaking than you do trying to type. It’s literally faster than typing. Sometimes that’s the best approach. Other times I want to be very specific, because it’s not 100% accurate in transcription, and I want to type it. But you know, I’m at home alone, so I have no one else to talk to. I might as well talk to my robot.

I think the last thing I’ll say on that is: when I’m typing, I have to see what I’m typing as I’m typing, and therefore I have to correct myself. I’m trying to get the perfect words out. Whereas if I’m talking, I can ramble. I can double back. I can even correct or contradict myself, and it will pick up on that and either say, “Hey, you said two things, which one do you actually want?” which is useful, or it will notice that I corrected myself and take the correct side. So from that perspective, that workflow is pretty awesome.

[Q]: So that’s all we have for today. You can learn more about Philly CocoaHeads at phillycocoa.org. There you’ll find links to our Slack group, Meetup schedule, and contact info. If you’re feeling generous, leave a review on Apple Podcasts, Spotify, or whatever your podcast platform of choice is, and share us with all your developer friends.

One more thing, thank you again, Alex, for joining us and explaining your journey. For me especially, as someone who is much more of a casual AI user, this was fantastic. There’s also an event we would love to hear about. Can you give us a brief description and how to participate?

Yeah. Back to the beginning of the conversation where we started talking about the Meetup community and the kind of reemergence of meetups after the pandemic, the quarantine took longer than I think anybody expected, but it’s finally starting to hit this stride that’s really exciting.

We put together an event coming up in March, on March 15th. We’re calling it the Big Philly Meetup Mashup. It invites people from all different meetup communities, not just technical, but also creative and design, because obviously making stuff is not just code. We want folks to come together for a day and make things together.

The theme for this is especially relevant to the times we’re in, although I would pick a theme like this anytime, “Good Neighbors.” It’s intentionally open to interpretation but also points people in a particular direction. I don’t know what people are going to build. I’m excited to see what it’s going to be. We’ve got around a dozen different groups, communities, and meetups. We should get Philly CocoaHeads on the list if you guys are interested.

[Q]: Yeah, yeah. Supabase is the main sponsor that’s helped us get this off the ground. They’ve got this great database and backend-as-a-service tool. You don’t have to use Supabase in the hackathon, but there will be points awarded for Supabase usage in some of the judging categories.

We make it an all-day event. Come in in the morning, grab some breakfast and snacks. You can come in as an individual and work alone, or join a team. We can pair you up with a team roller-coaster style, or if you want to form a team ahead of time, that’s cool too.

The response we’ve gotten has been really, really exciting. Ultimately my goal is that this supports the meetups and the hard work that the meetup organizers in Philadelphia do. I’m trying to take as much work off of people’s shoulders as possible. Just bring your crew, invite your people. This is basically an event that all of us can do together.

But I also want to cross-pollinate the meetups more. I feel like I have both the privilege and the opportunity to work with all these people who I know are great, and their community members are great, but they all operate in silos. For one day, we’ll come together. People will hopefully meet people they’ve never met before and wouldn’t meet otherwise, because they’re from different parts of the creative world.

My hope is that it is successful enough that we can turn this into something we’re doing a few times a year, maybe three or four times a year. We’ve got great community partners from across the city, and we’re talking to a few new sponsors to come on and help make tickets free for folks, because I don’t want to make that $10 barrier, which is more good for commitment than for covering costs. But we’ve got some folks who are willing to give us some money to help cover the food, drinks, all those kinds of things. I’m really stoked. And I think other people are too. It feels like the kind of thing that Philly needs right now, and hopefully the beginning of a tradition as well.

The URL for this is indiehall.org/good-neighbors. It’ll be in the show notes.

[Q]: All right. Well, thank you, Alex, and thank you for joining us. Till next time, good luck on your own developer journey. We will cheer you always.

Maybe that should be what I call my Claude bot when I make one. Call him Quasimodo. That’s really funny.

← All posts