Claude Code best practices | Code w/ Claude
By Anthropic
Summary
## Key takeaways - **Claude Code: A Terminal-Savvy Coworker**: Claude Code is described as a coworker who excels at terminal operations, akin to a highly skilled engineer who bypasses GUIs for efficient command-line work. [03:08] - **Agentic Search over Indexing for Codebase Understanding**: Unlike traditional methods that index entire codebases, Claude Code explores and understands code through agentic search, using familiar tools like 'glob' and 'find' to navigate and comprehend the project structure. [04:52] - **Thought Partner for Feature Implementation**: Before writing code, Claude Code can be used as a thought partner to explore implementation options. You can ask it to research and present multiple approaches without immediately modifying files. [07:25] - **Leverage cloud.md for Persistent Instructions**: The cloud.md file serves as a crucial tool for sharing state and instructions with Claude Code across sessions, providing important context like how to run tests or an overview of the project layout. [10:41] - **Smart Use of Permissions Speeds Workflow**: Configuring permission management, including an 'autoaccept' mode or always approving specific commands like 'npm run test,' can significantly accelerate your workflow with Claude Code. [12:38] - **Model Thinking Between Tool Calls**: With Claude 4, models can now think between tool calls, which is particularly useful for complex tasks and debugging. This allows for more nuanced understanding and problem-solving within the coding process. [19:39]
Topics Covered
- Claude Code explores codebases like a human.
- Use Claude Code to plan, not just write code.
- Claude Code makes large codebase migrations digestible.
- Share state with claude.md for persistent context.
- Orchestrate multiple Claude Code instances for parallel tasks.
Full Transcript
Let's get started. Welcome everyone to Cloud Code best practices. In this talk, I'm going
to talk about kind of what cloud code is at a high level. Then we'll peer under the hood a little bit
to kind of understand how cloud code works. And then knowing that because it's useful to kind of
know how your tools work. We're going to talk about good use cases for cloud code and also
best practices we've figured out both internally and from our users uh for getting the most out of
this tool. Uh but before I get started, I'd like to introduce myself real quick and talk about how
I ended up on the stage. So, my name's Cal and I joined Enthropic about a year and a half ago
uh to help start up a team we call applied AI. And it's the applied AI's kind of mission,
our team's mission is to help our customers and partners build great products and features on
top of Claude. So what that really means is I spend a lot of my day prompting Claude to
get the absolute best outputs out of these models. That said, I also love to code and
I'm definitely one of those coders that like starts a lot of projects, has some crazy idea,
and then just never finishes them. So, I have this graveyard of just like code that I started,
never really finished. Um, but I'm always spinning new things up. And late last year,
I was in Slack and I was hearing about this new tool that a few people are using. They were saying
it was really cool. And so, on a Friday night, I downloaded the tool that would become Cloud Code.
And I threw it at this kind of new notetaking app that I wanted to build. And like that whole
weekend just kind of totally changed the way that I code and think about software engineering. I was
carrying around my laptop with me all weekend. I was super addicted to just watching Claude Code
work and I would press enter and I'd switch over to my browser and refresh and I watched this huge
powerful application come together in front of my eyes. And I got way farther into this thing than
I ever would have on my own. And it just blew my mind. And while I was doing this, I was a little
worried. I was like, you know, I you know, I kind of know how these things work. So I'm like, man,
I'm using a lot of tokens. I hope I don't get in trouble or anyone like notices. I'm not really
contributing to anthropic code. Um, but what I didn't know is that the claude code team had
built this internal like leaderboard tracking how much all the anthropic employees were using
this. And over the weekend, I had shot to the top. And so through that, I got to meet Boris
and Cat and some of the early cloud code team. And I was able to start talking to them and say,
"Hey, I love this tool. I also know a lot about prompting. Can I help you all out?" And so through
that I got involved and now I'm one of the core contributors on the team and I do a lot of I work
a lot on the prompting the system prompts how the tools work the tool descriptions and tool results
as well as I work on how we evaluate this tool. So when we think about changing the prompts how
do we make how do we know we made things better or the same and we didn't totally ruin cloud code. So
with that said let's kind of dive in. So, here's my current mental model of Claude Code and how I
describe it to people when people ask me. Claude Code is like that co-worker that does everything
on the terminal. It's the sort of person that just never touches the guey. They're a whiz. I think
of when I was a junior engineer, I had this mentor and I would walk over to his desk and I would say,
"Hey, Tony, can you help me with this bug?" and he would whipping it open his terminal and he'd
be like doing all these crazy bash commands and changing things around in Vim and I'd
always walk away thinking, "Wow, that was crazy. I should learn how to do that." Um, I never did.
But having Claude Code on your computer is kind of like having Tony next to you all the time.
So, how does Claude code kind of work under the hood? At Anthropic, we try to always do what
we call the simple thing that works. And what that means for Cloud Code is it's what we would
consider a very pure agent. And anthropic, when we talk about agents, what we really mean is some
instructions, some powerful tools, and you let the model just run in a loop until it decides it's
done. And that's really what Cloud Code is. So it's tools, powerful tools, and the tools that you
know someone that was really good at a terminal would be able to use tools to create and edit
files to use the terminal. And then you can also do things like pull in other things with MCP. Now,
on top of that, there's how Claude understands the codebase. And if you're going to build a
coding agent or a coding tool a year ago, you'd probably have ideas like, well, okay, I'm going to
get this user message about something about this codebase and I'll need to figure out which files
are relevant. So maybe I'll like index the whole codebase and embed it and do this fancy like kind
of rag retrieval thing. That is not how cloud code works. We don't do any sort of indexing. Instead,
claude kind of explores and understands the codebase. how you if you were new to a team
and new to a codebase would explore a codebase and that is through a gentic search is the same
sort of search tools you or I would use things like glob and gp and find and it can work its way
through a codebase and understand what's going on and when we talk about a gentic search that really
means the model can go do some searches and then it can look at the results and can say hm maybe I
need to figure out a few more things I'm going to go do some more searching and then come back and
then on top of these primitives. On top of this agent, we have a few things. We have a very nice
light UI layer where you get to watch Claude code work. You see all the text fly by and we
have this nice permission system that allows the agent to work and allows and kind of forces the
human to butt in when the agent is doing something dangerous. And then on top of that, we also care a
lot about security in this tool. And so because quad code is just such a lightweight kind of
layer on top of the model and the fact that our model is available not just behind anthropic APIs
but also with our cloud providers AWS and GCP it's very easy and native to point cloud code at one of
these other services if you feel more comfortable consuming cloud that way. Now a lot of people ask
me hey Cal what can I use cloud code for? Like what is it good at? where is it interesting? And
the reality is it's kind of great at everything. So let's start with discovery. Often times in your
career, you will be dropped into a new codebase. Whether that means you're switching teams,
you're switching companies, I don't know, you're starting to work on some sort of
open source project. And probably when you're first getting started and getting familiar,
you're not very productive because you're just trying to figure out where things are in the
codebase, what patterns kind of the team is using, things like that. And Claude code can kind of help
supercharge that onboarding process. You can ask claude, hey, where is this feature implemented?
Or since it's great at the terminal, you can say, hey, look at this file and look at the git
history and just kind of tell me a story about how this code has changed over the past couple weeks.
One thing you can use cloud code for, and I think this is underrated, is instead of just diving in
and starting to work, you can use cloud code as a thought partner. So oftent times when I'm working
with Claude and I want to implement a feature or we're going to change something up, I'll open up
Claude and I'll say, "Hey Claude, you know, I'm thinking about implementing this feature,
can you just kind of like search around and kind of figure out how we would do it and maybe report
back with like two or three different options. Don't start working. don't start writing any
files writing any files yet and claude will go off and use those agentic search capabilities
and come back with a few ideas and then I could work with claude to kind of validate things and
then we can jump into the project of course cloud code is great at building and writing code and
I would say this in on two different fronts one it can do the zero to one sort of stuff you drop
it in an empty directory and you say hey build me an app build me a game that demos where very well
it's very fun to do it's very grat gratifying. Of course, in reality, what really matters is is
cloud code good working in existing code bases. And this is primarily what we focus on. Um,
on the cloud code team, we have in our codebase abnormally high, I would say, unit test coverage.
And that's because cloud code makes it so easy and just straightforward to add unit tests. So, we
have great code coverage. And then the other thing we have in cloud code in our own codebase is we
have great commits and PR messages because when we finish working we'll just say hey cloud write the
commit for me write the PR message for me. We also see great opportunities to use cloud code in kind
of the deployment like deployments and in other parts of the life cycle. And this is a few other
people have talked about this but this is using the cloud code SDK. So using it headlessly, using
it programmatically, being able to sprinkle in a coding agent agent anywhere. And so that's things
like sprinkling it into CI/CD to use it in GitHub for instance to help people um programmatically.
And then finally, it's great kind of with support and scale. It can help you debug errors faster.
One thing that we saw when we started giving cloud code to customers and talking to them about it,
we didn't totally predict this was a lot of customers or potential customers said, "Hey,
we've been me we've been kind of putting off this like large codebase migration. People that are on
old versions of Java trying to get to a new one or a team that's on PHP and they're trying to
get to React or Angular. We've talked to multiple teams like this and having a tool like Cloud Code
makes projects like that a little more digestible. when you go to your team and you say, "Hey, we're
going to spend a month, you know, refactoring or rewriting large parts of the codebase." And then
on top of that, and this kind of matters across all these, is once again remember Claude is great
at the terminal. And that means it's going to be great at all those different CLI tools,
things like Git, Docker, Big Query, things like that. I never have to worry about, oh, I'm going
to get myself, how do I get myself out of this sticky rebase? I'll just fire up cloud code and
tell it the situation and be like, "Hey, can you fix this for me?" It's incredible. Now, let's
talk about best practices. And the first one is not going to be a surprise, but the first one is
use claw.md files. So, remember that cloud code, like I said, is an agent and it has some tools,
has some lightweight instructions in the prompt, but it doesn't really have memory. And so the main
way we share state across kind of sessions or across our team when we fire up cla code
in the same codebase over and over again is this cloud.mmd file. So when we start cla what happens
is if there's this claw.md file in the working directory it's just plopped into context. It's
plopped into the prompt. And basically what it says is hey claude by the way these are important
instructions the developer left for you. Be sure to pay close attention to this. And there's
various places you can put the cloudmd file. You can put it in a project and check it in so all
your teammates share it. You could put one in your home directory if there's things you just want
claude to always know about regardless of what you're working on. And the things you put in here
are things like, hey, by the way, maybe this is how you run the unit tests. Or just so you know,
to make kind of your searching and life easier, here's like just like an overview of kind of how
this project is laid out, where the tests live, what different modules are, things like that.
or here's our style guide. All sorts of things like that to just make Claude's life a bit easier.
And you can build these things up over time. The other thing you can do, which is important,
is permission management. When you're running Cloud Code, there's all sorts of different kind
of permission things flying by. Kind of out of the box, what happens when you start our tool is for
read actions. If Claude is searching or reading, we just let it go. But once it starts writing or
running bash commands or doing things that could change change stuff on your machine potentially,
that's when we kick in this UI and it says something like yes, yes, always allow this or no,
um, I want to do something else. And using that permission management and being smart about it
can help you work faster. So there's something called autoaccept mode where if you're working
with cloud code and you press shift tab, claude will just start working. There's things you can
do like you can configure claude in the settings where specific commands like on bash like if you
just are like tired of saying yes run npm run test you can just always approve that. So fiddling with
your permission management is a great way to kind of speed up your workflow integration setup. So,
one thing that is going to help you get the most out of cloud code is remember that it's great at
the terminal. And if there's applications that you use which have kind of a way to access them
through CLI and GitHub is a great example of that. They have a powerful tool called GH you
can basically give more work to cloud code and you can do that either by just installing more
CLI tools or you can attach more MCP servers. Um, I would say just through experience that if you're
using something like um, a CLI tool that's well known and well documented and you're trying to
choose between the CLI tool and just installing it on your machine and grabbing an MCP server,
I would recommend using the CLI tool. Um, and then also if you internally have your own tools
at Anthropic, we have something called coup that does a whole bunch of stuff for us. You can also
tell Claude about that and you pro that's the sort of thing you'd put in claude.mmd and then context
management. So remember that claude is an agent and when it's an a what what it does it's calls
these tools and the context builds up and up over time and at least for anthropic our models have a
context window of 200,000 tokens and you can max this thing out. So you kind of have two options
when you're in a long session with claude and you're working and you're going back and forth.
You'll see in the bottom right you'll start to get this little warning that'll say hey you're
starting to fill up the context window and kind of depending on what's going on you have two options.
You can run slashcle and just start over and that clears everything out except for for instance
claw.mmd or you can run slash compact and what'll happen is basically it's like a user message is
inserted and it just says something like hey I need to go summarize everything we've been
up to. I'm going to give this to another developer and they're going to pick up where I left off. And
then that summary is what kind of seeds the next session. You can go from there. We spend a lot of
time tuning this kind of compact functionality so that as you max out the context window and
then run compact, you can start back over and keep going efficient workflows. What can you do
with cloud code? And how do you get the most out? So using planning and to-dos. talked a little bit
about this before, but one of the best things you can do is when you open up Cloud Code, instead of
saying, "Hey, I need you to fix this bug," you can say, "Hey, I have this bug. Can you search around,
figure out what's causing it, and just like tell me a plan how we're going to fix it?" And this can
save you a lot of time because you can verify, you can read Claude's plan, and you can verify
what it's going to do. And then the other thing that we have is we have this to-do list feature.
So often when Claude's working on a big task, it'll create a to-do list. And if you're kind of
paying attention, you can kind of watch this to-do list, and if you see anything kind of weirder in
there or something that doesn't make sense, that's when you can press escape and say, "Hey Claude,
let's change the to-do list. I think you're on the wrong path." Smart vibe coding. So it's
very tempting and it's very powerful to just let Claude work and press enter and see what happens
at the end. I think there's a few things that can help make this better. And there's I think a talk
later today about just this for 30 minutes. But doing things like having test-driven development,
having Claude make small changes, run the tests, make sure they pass, always having Claude do
things like check the TypeScript and the linting, and then commit regularly so that if it's kind of
going off the rails, you can always fall back and try again. You can use screenshots to guide and
debug. So Claude is built on top of our models which are multimodal. You can always just grab
a screenshot, paste it in, or if you have a file somewhere that's an image, you can just say, "Hey,
Claude, look at this mock.png and then build the website for me or whatever." And then advanced
techniques. So, as you're getting used to using Claude, what are some things you can think about
uh to kind of push things to the next level? And one of the things we see both internally and with
customers is when you've started to use this tool for a while, it's going to be very tempting to use
multiple clouds at once. And so I know people at Anthropic and a few customers that run four clouds
at the same time. There's various ways to do this. You can have it in T-Mox or just different tabs,
all sorts of crazy things. So I would challenge you to try getting multiple clubs running at once
and kind of be orchestrating all these things. It's quite fun. I can only do two, but I know
people that do four. Use escape. So, escape is your best friend. While Claude is working,
you can kind of keep an eye on what it's up to, and you can press escape to stop it and interject
and say, "Hey, I think you're going on the wrong path, or I want you to do something else." Knowing
when the right time to press escape is versus just letting Claude figure it out, is key to
getting the most out of the tool. And there's a hidden feature. Not too many people know about it,
but if you press escape twice, you can actually jump back in your conversation. You can go back
and you can kind of reset tool expansion in MCP. So, this is taking it to the next level. If you
feel like with bash and with the tools that cloud has that it still can't do something, this is
when you should start looking at MCP servers. And then headless automation. And I think this is the
thing we're most excited about, but also we are still trying to wrap our heads around internally,
which is how can we use Claude programmatically. We have that in GitHub actions. We want to figure
out other creative places we can start using it. I would challenge you all to do the same.
So, with that said, uh I'm going to jump over to my computer because there's one other best
practice, which is it's always good to stay on top of everything that's new. So, we're shipping
super fast. I'm going to throw I'm just going to go over a few things that are new as of today. Um,
one thing is when you're in Cloud Now and you fire it up, you can do slashmodel. You can see what
model you're running on. I'm on default, which happens to be Sonnet. We can jump over to Opus.
You can do the same thing in slashconfig. Switch it here. So that's new. Make sure you're running
the model that works for you. There's another thing that's new about these models which is
you can say something like um can you figure out what's in this project? And for a long time for a
while we've had this like think hard or extended thinking. Now this is great but with our past
models the we wouldn't let our model think between tool calls and that's probably when the thinking
matters most. So starting with cloud 4 they can now our models now think between tool calls and
we can watch this happen. So we have Claude in this project. There's a few different files in
here and I'm just going to tell it to think hard and figure out what's in this project and we can
watch Claude start to work. And so the way you know you triggered thinking is you'll see kind
of this lighter gray text and then it'll call some file, it'll call some tools, it'll read
some stuff, and then we see some more thinking. And this is awesome. Um, so I encourage you when
you're working on tasks and solving bugs, throw a think hard in there. And then the other thing,
and you know what, we'll just throw it up real quick, is I have this in VS Code, but of course
this is in Jet Brains as well, but we have these new great integrations with VS Code and and Jet
Brains. Um, we can do things like Claude's going to know what file I'm in. What file am I in?
That is not what I meant to say,
but Claude's going to figure it out. And you can do things like this.
So these are the sort of things I would encourage you to stay on top of. We have a public
uh kind of GitHub project called Claude Code under Enthropic. You can post issues there,
but we also post our change log there. And so I check this once a week and make sure that I'm on
top of all the new stuff we're shipping because even I can't keep up with it. So, with that said,
we have like four minutes left. I'm happy to answer questions about anything cloud code
related. We have it here. I can live demo some stuff if you're interested. Um, let's do a few.
Thanks. Real quick, this might be obvious, but multiple cloud MD files in a project. I presume
that's possible and it just figures it out or no? So, there's a few options, of course, like in the
same directory. You couldn't um but you could have one here and one in a subdirectory. And I think we
changed this so that all the subdirectory ones aren't read in because like Anthropic, we have a
monor repo and people would open it at the top and blow up their context with all the claud MDs. So,
we encourage Claude when it's searching around and it discovers claw.md files in um child directories
that are relevant to be sure to read them. But by default, it just reads the cloud MD file in the
current working directory when you fire it up. And then also you can set one in like your home
directory. Um there are things you can do though. We have this new thing like in your cloud MD you
can start referencing other files. So you could for instance um do something like this with an
at sign um if you have other cloud MD files that you just kind of know you always want to read in
um to do something like that. Hi. Okay. I um have not had luck getting Claude to respect my Claude
MD. Like there's one thing particular. Yes. where I'll ask it to refactor something and then it
will leave inline comments explaining the like the what of it is and it's like like something that's
extremely obvious and so I'll tell it like go and remove any inline comments that describe the what
of what's happening and then it will remove it and then immediately do it again and like the same
pass. So do you have any strategies for dealing with that? So there's kind of two things that
fix that. So that was actually kind of a model problem. There's nothing in the prompt. We have
actually a lot in the prompt for 37 that said, "Whoa, do not leave comments." And despite that,
the model just loves to leave comments. Um, so it doesn't surprise me that your cloud MD didn't help
much either. We already did a lot I did a lot of work to try to tamp it down from what happens out
of the box. So we mostly fixed that in Cloud 4. Now there might be some new weird behavior quirks,
but the other thing we made better in Cloud 4 is it's just better at following instructions.
Um, and we've gotten a lot of feedback from early testers that, uh, all of a sudden, whoa,
my cloud MD is being followed way more closely. Um, and it might be a good chance to go look in
your CloudMD and decide, do I still need this stuff? Maybe I can take some of it out. Maybe
I need to add a few new things. So, moving over to the new models might be a good time
to take another look at what's in there and see what you need and what maybe can go. Uh,
for the record, I'm trying to think of something that you might not have thought of. We're doing
multi- aent execution and parallelization. Can you make it so that for four agents,
say agents two and three use the context from agent one, maybe agent four uses the context from
agent two at a certain point. Yeah. Um yeah, etc. That's interesting. We're trying to So,
kind of like I said at the beginning, we're trying to do the simple thing that works,
which is just one agent that's great at coding and does everything. Um I think we want to figure
that out. Probably what's going to happen is if you wanted to do that, you would ask all your
agents to probably like write to a shared markdown file or something like that so they can all kind
of like check in and communicate. Um, sometimes like I'll be working with cloud.md or claude and
I'll just say like, "Hey, I need you to write some stuff in like ticket.md for another developer and
then I'll fire up another cloud code and I'll be like, hey, read ticket.md like another developer
left this note for you. Like this is what you're going to work on." So, I would think about trying
to write that state to a file and then just kind of like count on the model's ability to just like
read files and make sense them um is probably the best you can do today. And maybe we'll figure out
clever ways to expose that uh in the product as something more native. Cool. All right. And with
that said, I have some rare clawed code stickers that I found in my backpack. So, come find me.
I'll be hanging out over there or something. Um, happy to share them. Thank you. [Applause]
Loading video analysis...