Thumbnail for His Claude Code Workflow Is Insane by John Kim

His Claude Code Workflow Is Insane

John Kim

22m 28s4,104 words~21 min read
Auto-Generated

[0:00]Well, hello there. So, back in January, the creator of Claude Code, Boris Chenry, he actually posted about his entire workflow. And I actually had a chance to meet with him and ask him a bunch of questions, and I personally found his personal workflow very enlightening. And I've been trying to replicate a lot of his workflows directly into mine. So, today I thought it'd be fun to go over this chain of thread posts that he made, and also kind of show you physically what it actually looks like in practice. Now, I have a few local projects. They're nothing really in terms of complexity as my projects for work, but I thought it would actually work pretty well to kind of showcase some of these and kind of like interact with some of them right here. So, as usual, I created a little slide deck, so let's get right into it. So, this is Boris Henry. For each of these, I'm just going to read it out really quick. Show you each of the tips. Hi, I'm Boris and I created Claude Code. Lots of people have asked how I use Claude Code, so I wanted to show off my setup a bit. My setup might be surprisingly vanilla. Claude Code works great out of the box, so I personally don't customize it much. There is no one correct way to use Claude Code. We intentionally build it in a way that you can use it, customize it, and hack it however you like. Each person on the Claude Code team uses it very differently. So, here goes. I really like how he's set up here that Claude Code can be customized. I personally have been customizing the hell out of it, and at some point I'll probably share my own personal setup as well. But I really like how it starts out here. So, let's get to the first tip. The first tip is around running Claudes in parallel. I run five Claudes in parallel in my terminal. I numbered my tabs one through five and use system notifications to know when a Claude needs input. So, look at this. I will open up my terminal.

[1:51]All right, so it looks like what he does is he creates a Claude like this. And then he has one that is just for like just a terminal for Bash. So, it looks like this is his setup. And then he has multiple tabs like this. And then he probably replicates this Claude tab system for all of them, right? Now, I actually work very similarly like this. I'll have one instance here, one instance there. I'm using like hotkeys. For iTerms, it's Command 2, Command 3, Command 4 to switch between and then you could switch in between the tabs by doing Command left bracket or right bracket. Now, one additional tip here that I like to do to keep things like in my mental context is to like rename it. So, this could be like local one. Um, or maybe the project that I'm working on. Local. This is push to prod app, for example. And here, maybe instead of this, uh I I work on my anime Pomodoro app, for example. And because I did that, I would name this local Anime Pomodoro. Now, you could imagine that you would have like SSH or some kind of on-demand stuff as well, and this is exactly what I do at work. So, that's tip number one. It also looks like he uses light mode. I am not going to switch my dark mode to light mode. Okay, tip number two is five to ten web clouds. So, I also run five to ten Claudes on Claude.ai/code in parallel with my local Claudes. As I code in my terminal, I will often hand off local sessions to web using and, or manually kick off sessions in Chrome, and sometimes I will teleport back and forth. I also start a few sessions from my phone from the Claude iOS app every morning and throughout the day, and check in on them later. So, this is Claude.ai. And I actually haven't done the teleport feature, but let's try the teleport. I don't know if it will work, but for my push to prod app, let's work on some of the Printify integrations. Give me a plan. So, it looks like it's whatever sessions are on here, it just maintains here, but let me see if I can do a slash teleport. I'm just going to try, can you, can you push to the web? Slash slash teleport. I'm just going to try this. Okay, this is taking a long time.

[4:16]I'm just going to cancel this. And then let's do and, uh create to-dos for Printify integrations. Okay, so it looks like it's creating a background task. Look at this. Right here. So, you just hit and like this, and then, um, it creates a session, and then you can basically open the session like so, and it's going right here. That's really cool. I actually haven't been using this, but I can imagine doing this, especially when I'm like ready to go off for the day or something like that. And and it's synced to your phone, if you look at this. It's synced. So, and so you can start new sessions here. So, I actually didn't know about this, but this is actually mind-blowing to me. That that's awesome. I'm going to start using this all the time. Okay. Next tip. Tip number three is Opus with Thinking. Always. I use Opus 4.5 with thinking for everything. It's the best coding model I've ever used, and even though it's bigger and slower than Sonnet, since you have to steer it less and it's better at tool use, it is almost always faster than using a smaller model in the end. Now, he posted this before Opus 4.6 came out. So, I wonder what he's thinking about it now, because Opus is like known to be a lot slower. So, one thing you can do is you can switch, though, like this. Oh, using slash model. And I actually also just default to 4.6. They got rid of ultra think, which used to have this little like animation thing, but and if you have like just multiple like sessions of Claude Code going, then it doesn't matter if it's that slow, in my opinion. All right, tip number four is share your Claude.md. One Claude.md for the whole team. Checked into Git. Updated multiple times a week. Okay. Our team shares a single Claude.md for the Claude Code repo. We check it into Git, and the whole team contributes multiple times a week. Any time we see Claude do it do something incorrectly, we add it to the Claude.md, so Claude knows not to do it next.

[6:16]Our team maintains their own Claude.mds. It is each team's job to keep theirs up to date. Now, I actually asked Boris what his personal Claude.md is, and he said there's basically like two lines. And it just points to, um, using the Claude.md. And so, so the whole idea is that they're doing compound engineering and then context engineering right within the codebase. I have a video coming up around this on agentic engineering. But, but yeah, it's very simple. I also am doing this now where, for example, um, like this Pomodoro app, I have the Claude.md directly here. And it's kind of like things about my codebase for iOS, the navigation flow, the design patterns and things like that. A lot of this stuff you can just create using slash init. But yeah, like this this is like very straightforward stuff. All right, tip number five is at Claude in code reviews. So, during code review, I will often tag at Claude on my coworkers' PRs and add something to Claude.md as part of the PR. We use the Claude Code GitHub action slash install GitHub action for this. It's our version of at Dan Shipper's compounding engineering. Now, so I actually kind of set this up. So, you can see that like right there, Claude's there in this workflow. Um, let me just try making a quick PR. Write me a quick PR on some of these to-dos and push it as a separate branch. So, the whole idea is that you should theoretically, once this pushes, do an at and then do a review. Now, obviously this is like not a good example that I'm doing because it's just to-dos. But theoretically, the the whole idea is you develop a system so that it automatically uses Claude to review your diffs or do other actions.

[8:06]Tip number six is plan mode first. Most sessions start in plan mode. Shift Tab twice. If my goal is to write a pull request, I use plan mode, and go back and forth with Claude until I like his plan. From there, I switch into auto-accept edits mode and Claude can usually one-shot it. A good plan is really important. So, I I also do plan mode all the time as well. So, for example, here, I want to create a new live activity for my Anime Pomodoro app where it keeps track of the timer in my live activity, like live activity and also dynamic island. All right, there's something definitely wrong with this UI here, but it's going. So, I I I really like plan mode, um, because it's a way to really analyze and deep dive into your codebase before you actually make any changes. Someone asked me recently, why do you even have multiple Claude instances? What are you doing? A lot of times, if I'm not using Git work trees or like some way to do multiple coding executions, I'm actually doing a lot of deep dives using plan mode for like different parts of the codebase. So, maybe I have like some kind of performance optimization project I want to do on media viewer. Maybe I want to do look into app in it or app start. Whatever I'm trying to investigate, I actually use plan mode. And also for like investigating SEVs or investigating like random bugs, I'll also start with plan mode to start investigating. And plan mode is essentially a way for you to create prompts, like gigantic prompts, like really good prompts. And I talk about context engineering and things like that, but plan mode is where you do the orchestration to be able to bring all the context that you need into that Claude instance, so that the agent can execute correctly. All right, tip number seven, slash commands for everything. I use slash commands for every inner loop workflow that I do many times a day. This saves me from repeated prompting, and makes it so Claude can use these workflows, too. Commands are checked into Git and live in.Claude/commands/.

[10:10]For example, Claude and I use a /commit-push-pr slash command every day. The command uses inline Bash to pre-compute Git status to make the command run quickly and avoid back-and-forth with the model.

[10:26]Okay, so if you ever wonder how you want to make a slash a command, it's it's very very easy to do. So, let's just go here and say, I want to create a commit-push-PR skill, and this skill needs to format my code and then add everything that I just did in this session, and then commit the code with a good commit message. I always want to push it as a PR rather than directly as main, so that I can review the code online. Something like that. And these days, actually, slash commands and skills are basically the same. So, Claude will usually create the same thing now. You know, the thing about making these videos is that it just takes a long time because Claude takes a long time to run. I probably should have run this on Sonnet, but it's okay. Opus is fine. But you can see here that it's exploring the skills first, so that it's not remaking the same thing. And I love the fact that Claude Code and Code X, they ask questions rather than just assuming. And I think this is like a big change between, like, I don't know, I haven't used cursor in a bit. Maybe I should give it a try. But I remember it it just like kind of did stuff without and it always just made assumptions, which and and it always turned out like not great. All right, it decided to name it slash ship, which is fine to me as well. But yeah, that's how you create skills. It's very easy. You remember, all you need to do to make skills or slash commands or subagents or install MCPs is just leverage Claude Code to ask you to do it. All right, tip number eight from Boris is Custom Subagents. I use a few subagents regularly. Code simplifier simplifies the code after Claude is done working. Verify app has detailed instructions for testing Claude Code end to end, and so on. Similar to slash commands, I think of subagents as automating the most common workflows that I do for most PRs. Now, one thing about subagents I want to say is that it's really to protect the context.

[12:25]Subagents are really useful if you want to do like side effects, or if you want to just have the result of that like Claude instance running. You don't really care how it got there, but you just want the output. That's really good for subagents. There's a new thing that that just came out with Opus 4.6 called agent swarm or agent teams, and I'll probably do a video on this, but it's the idea of subagents that have actually different roles, and they share context with each other, and there's like a master orchestrator. I think I in my other video I show what a subagent is, but I should have some subagents here. agents. You can see here, I actually have, I created the same ones that, uh Boris made 'cause I I I thought it was very interesting. But yeah. So, I could just say right here in another instance, can you run my code architecture subagent to verify the integrity of my build or integrity of my app? I don't know about you guys, but I run out of RAM all the time at work. I think one my codebase is extremely large, and then I I also have like five or so Claude instances running all the time. Um, I had to give up running Android Studio completely, or like I I just have my terminal up. I don't even have Chrome up sometimes when I'm running out of memory. So, yeah. So, you can see that it's running two agents here. Let's do Control O to expand it. And just see what it's doing. Yeah, code architecture is reviewing. I don't know, all of this stuff is so cool to me. Okay. So, while that's all going, let's go back. All right, pulse tool use hooks. I don't know why it's hard to say, but we use a pulse tool use hook to format Claude's codes. Claude usually generates well-formatted code out of the box, and the hook handles the last 10% to avoid formatting errors in CI later. This one there's not much to show, you can create one just saying pulse tool use, and it's very similar to like pre-commit hooks. It's it's nothing new here. All right, slash permissions and not dangerously skip. Number 10. I don't use dangerously skip permissions. Instead, I use slash permissions to pre-allow common bash commands that I know are safe in my environment, to avoid unnecessary permission prompts.

[14:45]Most of these are checked into.Claude/settings.json and shared with the team. This is what I talk about like in compound engineering, where this you need to like start putting things like this into the codebase and share it with the team. A a team needs to be like AI native first. Everyone has to kind of start agreeing on some of the these these like ways that we need to work. And that's how you really move quickly. But yeah, so quickly showing you guys, you can just slash permissions here. And then, yeah, slash permissions, there's a bunch of things here. And I I would just say, you can update this manually, right? Can you update my permissions list so that all bash scripts are okay to run? For example, you could you could do that. Like I keep saying this, but don't manage your Claude Code instance manually. You know, just have Claude Code do it. And then after you do this, you could always push all of this directly into the codebase. You see, it's a change trying to change the settings right now. All right. While that's going, tip number 11, MCP for all tools. Slack, BigQuery, Sentry. Claude uses your tools, not just your codebase. 11. Claude Code uses all my tools for me. It often searches and posts to Slack via the MCP server, runs BigQuery queries to answer analytic questions using a BigQuery CLI, grabs error logs from Sentry, and Slack MCP configurations is checked into our MCP.json and shared with teams. Now, I always say, be careful with MCPs because they're known to blow up your like context window. Only leverage it when you need it for a very specific thing. If you see what these are, these are very like outside of the norm of regular coding. And even like Slack, right? Like, this is, so we we have this integration similar to our internal communication channel. And I use this as a with a combination of our like PR reviewing thing where I'll just pull all of my context from the PRs, read the diffs that I wrote this week, and then I'll have it summarize that and then like send status reports to like specific threads that I want. So, using Claude Code to manage your work, besides just coding is like a whole like big thing. Now, there's not much to show here. But for MCPs, you should always just kind of be careful because I I think like MCP is also another place where prompt injection is going to start happening. Same thing with downloading plugins and stuff like that. I think just be careful when you're doing these, and just always have Claude Code review the MCP before you install it. Okay, for number 12, long running tasks. For very long running tasks, I will either prompt Claude to verify his work with a background agent when it's done, use an agent stop hook to do that more deterministically, or use the Ralph Wiggin plugin.

[17:31]I will also use either permission mode equals don't ask or dangerously skip in sandbox to avoid permission prompts for the sessions. So, Claude isn't blocked on me. So, now I don't really use dangerously skip too often. Or even Ralph Wiggin, I tried Ralph Wiggin. Ralph is this. All right, so this is the Ralph Wiggin loop, basically, you just have a task, you have the agent, you have the file system, and then it just keeps looping until it's finished. I don't really like this because I feel like there's it's too, uh, I don't know, there's just so much uh work that needs to happen for you to have like a spec that's like so perfect that you can just have something like Ralph build a whole thing. But honestly, for side projects and things like that, I might just spec the whole thing out, and I don't really care too much. And it's it's okay. And the whole idea is like, you do it a few times maybe, and then get a different result every single time. And then you kind of test out if it's good, and then you could throw it away and then start engineering. I think there are times when it's actually pretty good. I think the hype around it has died quite a bit. But yeah, like if if you want to use it, I'm not going to show how to use it here, but you just install the plugin that I showed you earlier, and then just start installing it. But to do dangerously skip permissions, it's very easy to do that. So, for example, when you're here, um, let's exit here. When you do Claude, you can do, you can do just a Claude, dangerously skip permissions, like that. And then now when you ask Claude to run something, it won't ask you any permissions, basically. It's it's okay. 13. A final tip, probably the most important thing to get good results out of Claude Code, give Claude a way to verify its work. If Claude has that feedback loop, it will two to three X the quality of the final results. Claude tests every change I land in Claude.ai/code using the Chrome extensions. It opens a browser, tests the UI, and iterates until it works. So, let's give this a try. Can you run an end-to-end integration test navigating the website from the homepage to the detail page when you click on a poster? Make sure the title is the same. Okay, so it just launched the website. I'm going to I'm going to try to show it. Okay, there you go. Check that out. Okay, so it navigated to the main website. All right, so now it went into the detail page and it's clicking on stuff. You can see that it's like taking screenshots and stuff. It's very cool. And this is kind of this agentic validation thing that I'm talking about in one of my other videos. And look, it passes. It it like tells you what it did. Very, very cool. And this is like a different form of end to end, right? It's not it's I didn't like write an end to end test per se, right? It just kind of knew how to do it and navigate. You can do a really a lot of interesting things here. So, that's Boris Chenley's workflow. I hope you guys enjoyed this. I think one of the really interesting things is that if you think about what your work might have looked like six months ago, and then you compare it to like Boris's workflow, it's probably like night and day, right? We were still manually coding at that point. But now we have like multiple Claude Code instances, just going at all times. Multiple Claude Code instances, and you're just like playing Starcraft over here. You know, basically saying, hey, file this PR over here. And then and then you go to the next one, and then you go down, and you go, oh, update my like backlog task, or fix this bug, and you switch over. Now, I know probably this is context switching wise, mentally, it's probably the bottleneck at this point. And these little quick prompts that I'm doing is obviously not ideal. But you should really challenge yourself to try to like take some of the learnings here, try it yourself. Like one thing I'm going to do this week is definitely figure out how to do the teleport thing more often. Obviously, I can't do it for my work because we don't have slash teleport yet, but for my personal projects, I could just see myself doing this. And I want to build like a entire agentic validation on GitHub so that I can just do Claude Code sessions on my phone and actually code. You know, I did a video around kind of trying to do this with happy, but it it in that workflow is very hard to test the flow because but with GitHub actions, if if it can actually navigate the web and send me like a gift of like what it did, then it makes me feel a lot more safe and and I just know that it's validated itself using screenshots and stuff like that. But yeah, I hope you guys enjoyed this video on Boris Chenry's Claude Code setup, and go and check out my other Claude Code videos and my engineering videos, and until I see you guys on the next one. Bye.

Need another transcript?

Paste any YouTube URL to get a clean transcript in seconds.

Get a Transcript