[ { "i": 0, "speaker": "Speaker 1", "text": "How you can stop babysitting your agents." }, { "i": 1, "speaker": "Speaker 1", "text": "As models have been getting smarter, I've noticed that we're increasingly spending a" }, { "i": 2, "speaker": "Speaker 1", "text": "larger percentage of our time staring at the screen waiting for Claude to finish his work" }, { "i": 3, "speaker": "Speaker 1", "text": "or just acting as a glorified QA tester for Claude." }, { "i": 4, "speaker": "Speaker 1", "text": "And this can be quite unsatisfying and also just an inefficient use of your time." }, { "i": 5, "speaker": "Speaker 1", "text": "And my goal for this talk is to give you strategies and help you take back some of this time so" }, { "i": 6, "speaker": "Speaker 1", "text": "that you can manage your agents better." }, { "i": 7, "speaker": "Speaker 1", "text": "You can also think of this as a more advanced Claude Code talk." }, { "i": 8, "speaker": "Speaker 1", "text": "So a Claude Code 301 type university class." }, { "i": 9, "speaker": "Speaker 1", "text": "And because of that, we have some prerequisites and some table stakes that everyone here should" }, { "i": 10, "speaker": "Speaker 1", "text": "have at least heard about if not implemented." }, { "i": 11, "speaker": "Speaker 1", "text": "So here are some of the things you can do to improve your Claude Code experience, starting" }, { "i": 12, "speaker": "Speaker 1", "text": "with a very high-quality ClaudeMD file." }, { "i": 13, "speaker": "Speaker 1", "text": "This is the single highest leverage thing that you can do to improve your Claude Code" }, { "i": 14, "speaker": "Speaker 1", "text": "experience." }, { "i": 15, "speaker": "Speaker 1", "text": "So if you haven't done this yet, I highly encourage you to try it out." }, { "i": 16, "speaker": "Speaker 1", "text": "Number two is connecting your tools to Claude Code." }, { "i": 17, "speaker": "Speaker 1", "text": "A good rule of thumb is that if a tool is useful for you in your day-to-day life, it" }, { "i": 18, "speaker": "Speaker 1", "text": "will also be useful for Claude." }, { "i": 19, "speaker": "Speaker 1", "text": "So things like, you know, Slack." }, { "i": 20, "speaker": "Speaker 1", "text": "Asana." }, { "i": 21, "speaker": "Speaker 1", "text": "Linear." }, { "i": 22, "speaker": "Speaker 1", "text": "Datadog." }, { "i": 23, "speaker": "Speaker 1", "text": "BigQuery." }, { "i": 24, "speaker": "Speaker 1", "text": "All of these things help Claude stitch together a much richer context for itself." }, { "i": 25, "speaker": "Speaker 1", "text": "And it's able to perform much better if you give it access to these tools." }, { "i": 26, "speaker": "Speaker 1", "text": "And finally, setting up your remote environment on Claude Code web." }, { "i": 27, "speaker": "Speaker 1", "text": "This makes it so that the compute that's running your Claude Code is separated or decoupled" }, { "i": 28, "speaker": "Speaker 1", "text": "from your laptop." }, { "i": 29, "speaker": "Speaker 1", "text": "So you can close your laptop." }, { "i": 30, "speaker": "Speaker 1", "text": "Your laptop could die." }, { "i": 31, "speaker": "Speaker 1", "text": "You could spill some water on your laptop." }, { "i": 32, "speaker": "Speaker 1", "text": "And your Claude Code sessions will still continue because they're running in the cloud." }, { "i": 33, "speaker": "Speaker 1", "text": "I'd love to see a show of hands here." }, { "i": 34, "speaker": "Speaker 1", "text": "How many people use Claude Code every day?" }, { "i": 35, "speaker": "Speaker 1", "text": "That's almost everyone." }, { "i": 36, "speaker": "Speaker 1", "text": "How many people have completed the first two things here?" }, { "i": 37, "speaker": "Speaker 1", "text": "So high-quality ClaudeMD and you've connected your tools?" }, { "i": 38, "speaker": "Speaker 1", "text": "So about 50%, I'd say." }, { "i": 39, "speaker": "Speaker 1", "text": "And then how many people have done all three?" }, { "i": 40, "speaker": "Speaker 1", "text": "So if you haven't raised your hand at all, don't worry, you'll still get some value out" }, { "i": 41, "speaker": "Speaker 1", "text": "of this talk." }, { "i": 42, "speaker": "Speaker 1", "text": "But I would encourage you to start with these three things first." }, { "i": 43, "speaker": "Speaker 1", "text": "So why does your tooling need to change?" }, { "i": 44, "speaker": "Speaker 1", "text": "Most software tooling so far was built with humans in mind." }, { "i": 45, "speaker": "Speaker 1", "text": "Whether it's linters, IDEs, prettiers, type checkers, even compilers, they were mostly" }, { "i": 46, "speaker": "Speaker 1", "text": "written with the goal of making them work." }, { "i": 47, "speaker": "Speaker 1", "text": "Making humans and human teams faster." }, { "i": 48, "speaker": "Speaker 1", "text": "But the problem now is that humans aren't writing most of our code anymore." }, { "i": 49, "speaker": "Speaker 1", "text": "It's agents." }, { "i": 50, "speaker": "Speaker 1", "text": "So we have to take a step back, zoom out, and reconsider our tooling." }, { "i": 51, "speaker": "Speaker 1", "text": "And when you do that, there's some good news and then there's some bad news." }, { "i": 52, "speaker": "Speaker 1", "text": "The good news is that a lot of these tools that we've built for ourselves translate over" }, { "i": 53, "speaker": "Speaker 1", "text": "pretty well for agents as well." }, { "i": 54, "speaker": "Speaker 1", "text": "So things like prettier." }, { "i": 55, "speaker": "Speaker 1", "text": "And linters and symbol servers." }, { "i": 56, "speaker": "Speaker 1", "text": "Cloud and agents can end up using these things quite effectively." }, { "i": 57, "speaker": "Speaker 1", "text": "And they serve them pretty well." }, { "i": 58, "speaker": "Speaker 1", "text": "But the bad news is that we also have blind spots." }, { "i": 59, "speaker": "Speaker 1", "text": "As human beings, we have some assumptions that we make about our tooling and our tool" }, { "i": 60, "speaker": "Speaker 1", "text": "chain that cloud doesn't have." }, { "i": 61, "speaker": "Speaker 1", "text": "And for that reason, it's important to ask the question, what does an agent need from" }, { "i": 62, "speaker": "Speaker 1", "text": "your code base that a human takes for granted?" }, { "i": 63, "speaker": "Speaker 1", "text": "And I'd love for you guys to keep that question in mind as we continue to the rest of the" }, { "i": 64, "speaker": "Speaker 1", "text": "talk." }, { "i": 65, "speaker": "Speaker 1", "text": "Because it kind of frames the goal of not babysitting your agents as much in a much" }, { "i": 66, "speaker": "Speaker 1", "text": "more clear way." }, { "i": 67, "speaker": "Speaker 1", "text": "So this is our roadmap for today." }, { "i": 68, "speaker": "Speaker 1", "text": "We'll be talking about three distinct things that build on top of each other." }, { "i": 69, "speaker": "Speaker 1", "text": "And when you take all of these three things together, they become incredibly powerful" }, { "i": 70, "speaker": "Speaker 1", "text": "and give you a set of tools that can help you build on top of each other." }, { "i": 71, "speaker": "Speaker 1", "text": "And when you take all of these three things together, they become incredibly powerful." }, { "i": 72, "speaker": "Speaker 1", "text": "And give you a set of tools that can help you build on top of each other." }, { "i": 73, "speaker": "Speaker 1", "text": "And actually work in a way that we just haven't worked before, as human beings." }, { "i": 74, "speaker": "Speaker 1", "text": "So we'll be talking about verification, which is how to teach cloud to check its own work." }, { "i": 75, "speaker": "Speaker 1", "text": "Once cloud can check its own work and be more reliable, we can now run many clouds" }, { "i": 76, "speaker": "Speaker 1", "text": "at the same time and be confident that they'll be doing the right thing." }, { "i": 77, "speaker": "Speaker 1", "text": "So we'll be talking about strategies for multi-clouding or parallelizing your work." }, { "i": 78, "speaker": "Speaker 1", "text": "And then, finally, we'll end with background." }, { "i": 79, "speaker": "Speaker 1", "text": "Background loops." }, { "i": 80, "speaker": "Speaker 1", "text": "loops are a way for you to completely take your keyboard out of the hot path so your keyboard is" }, { "i": 81, "speaker": "Speaker 1", "text": "not the bottleneck anymore and cloud just keeps running in the background in a loop doing useful" }, { "i": 82, "speaker": "Speaker 1", "text": "work for you so i'd like to start the verification section with a brainstorm for for a minute or so" }, { "i": 83, "speaker": "Speaker 1", "text": "i'd like everyone here to think about the last software project or feature that you worked on" }, { "i": 84, "speaker": "Speaker 1", "text": "and while you were working on that feature how did you check your own work and i don't just mean" }, { "i": 85, "speaker": "Speaker 1", "text": "how did you check the final output of your work but i also mean how did you iterate on your work" }, { "i": 86, "speaker": "Speaker 1", "text": "in a way that gave you confidence that you will end up in a place uh where you're expecting to go" }, { "i": 87, "speaker": "Speaker 1", "text": "so let's take 30 seconds if you have a pen and paper in front of you" }, { "i": 88, "speaker": "Speaker 1", "text": "feel free to jot this down if you have a laptop and you want to like put this in your notes" }, { "i": 89, "speaker": "Speaker 1", "text": "let's take 30 seconds together and just like come up with uh come up with" }, { "i": 90, "speaker": "Speaker 1", "text": "your last project and kind of how you verified your work there okay i see some typing slowing" }, { "i": 91, "speaker": "Speaker 1", "text": "down so um hopefully you've had a chance to think about it a little bit uh it's okay if you haven't" }, { "i": 92, "speaker": "Speaker 1", "text": "completely but i've found that most software engineering tasks can be broken down into the" }, { "i": 93, "speaker": "Speaker 1", "text": "series of steps that you see on the screen some some combination or sequence or subset of these" }, { "i": 94, "speaker": "Speaker 1", "text": "of these things uh enable you" }, { "i": 95, "speaker": "Speaker 1", "text": "to check your own work and build software so you kind of start with designing and writing code" }, { "i": 96, "speaker": "Speaker 1", "text": "you then usually end up building your code running your compilers type checkers etc" }, { "i": 97, "speaker": "Speaker 1", "text": "if they fail you kind of go back and change your code again and run it and" }, { "i": 98, "speaker": "Speaker 1", "text": "do that in a loop then you might run your run your executable whether that's a docker container or" }, { "i": 99, "speaker": "Speaker 1", "text": "a cli application or a web server and then you might check for side effects so if you're running" }, { "i": 100, "speaker": "Speaker 1", "text": "you might spin up your browser and you might see if the ui elements are showing up in the correct" }, { "i": 101, "speaker": "Speaker 1", "text": "place uh you might even look for logs to see if is is a specific log that you're looking for present" }, { "i": 102, "speaker": "Speaker 1", "text": "in your uh in your logs or you might check the database to see what the state is and if state has" }, { "i": 103, "speaker": "Speaker 1", "text": "been manipulated correctly um and then hopefully you'll run unit tests to make sure that you" }, { "i": 104, "speaker": "Speaker 1", "text": "haven't made any regressions and your feature hasn't uh broken some other feature and and and" }, { "i": 105, "speaker": "Speaker 1", "text": "hopefully you also added new unit tests for your for everything that you're working on when you're" }, { "i": 106, "speaker": "Speaker 1", "text": "working on. And then finally, you deploy the staging. Or if you're really brave, you go" }, { "i": 107, "speaker": "Speaker 1", "text": "straight to prod. And that's usually how humans kind of verify their work and build software." }, { "i": 108, "speaker": "Speaker 1", "text": "And what's interesting is that the same exact playbook can be used by Claude quite effectively" }, { "i": 109, "speaker": "Speaker 1", "text": "to also verify its own work and build software. So, as we go through the rest of this presentation," }, { "i": 110, "speaker": "Speaker 1", "text": "it's helpful to think about teaching Claude how to do things in a similar way that you" }, { "i": 111, "speaker": "Speaker 1", "text": "would do them. And the only thing that's required is giving Claude the right tools and instruction" }, { "i": 112, "speaker": "Speaker 1", "text": "set to make this possible. Okay. So, we've talked about verification. How humans do" }, { "i": 113, "speaker": "Speaker 1", "text": "verification and how Claude should theoretically do verification. But loops are really what" }, { "i": 114, "speaker": "Speaker 1", "text": "makes the whole thing go around. And this is arguably the most important slide in this" }, { "i": 115, "speaker": "Speaker 1", "text": "presentation." }, { "i": 116, "speaker": "Speaker 1", "text": "So, if you have any questions, please feel free to ask them in the chat box. And we'll" }, { "i": 117, "speaker": "Speaker 1", "text": "get started." }, { "i": 118, "speaker": "Speaker 1", "text": "If you haven't been paying attention yet, this is a good time to get started. A loop" }, { "i": 119, "speaker": "Speaker 1", "text": "essentially is an autonomous circuit that you can complete for Claude. And it allows" }, { "i": 120, "speaker": "Speaker 1", "text": "Claude to hill climb on a given task or a given success criteria. So, you can think" }, { "i": 121, "speaker": "Speaker 1", "text": "about it as giving Claude access to tools to verify its own work and to write code." }, { "i": 122, "speaker": "Speaker 1", "text": "And what Claude will do is it will write some code." }, { "i": 123, "speaker": "Speaker 1", "text": "It will check if there's a failure. If there's a failure, it will debug that failure and" }, { "i": 124, "speaker": "Speaker 1", "text": "write some more code. And then it keeps doing that in a loop again and again and again until" }, { "i": 125, "speaker": "Speaker 1", "text": "it gets to a success state. And when it finally gets to a success state, you can be confident" }, { "i": 126, "speaker": "Speaker 1", "text": "that the PR that it's sending you is higher quality and will actually work. So, in this" }, { "i": 127, "speaker": "Speaker 1", "text": "image that you see on the screen, I faced an issue recently where on my personal website," }, { "i": 128, "speaker": "Speaker 1", "text": "the signup button stopped working. And it's not working. It's not working. It's not working." }, { "i": 129, "speaker": "Speaker 1", "text": "It's not working. It's not working. It's not working. It's not working. It's not working." }, { "i": 130, "speaker": "Speaker 1", "text": "It's not working. What I told Claude was to make the signup button work. And this is" }, { "i": 131, "speaker": "Speaker 1", "text": "kind of what it did. There's more steps here, too. But for brevity's sake, it basically" }, { "i": 132, "speaker": "Speaker 1", "text": "started writing some code. It built my app. It clicked my signup button. Opened up a browser" }, { "i": 133, "speaker": "Speaker 1", "text": "and saw that the signup clicking the signup button isn't really doing anything. It doesn't" }, { "i": 134, "speaker": "Speaker 1", "text": "take you anywhere. So, then it decided to read some logs. And it found out what the" }, { "i": 135, "speaker": "Speaker 1", "text": "problem was. It fixed the code. Reloaded the app. And kept doing that until it got" }, { "i": 136, "speaker": "Speaker 1", "text": "to a successful state. And finally, what it came up with was a PR that indeed worked." }, { "i": 137, "speaker": "Speaker 1", "text": "So, the most important thing to take away from this slide is that wherever possible," }, { "i": 138, "speaker": "Speaker 1", "text": "our goal now is to get Claude into a loop by giving it the tools and instructions that" }, { "i": 139, "speaker": "Speaker 1", "text": "are required for it to work effectively. So, verification comes in many flavors. We talked" }, { "i": 140, "speaker": "Speaker 1", "text": "about UX verification. But you can have backend verification. You may want to verify your" }, { "i": 141, "speaker": "Speaker 1", "text": "entire app end to end, including infra." }, { "i": 142, "speaker": "Speaker 1", "text": "And the core concept here remains the same. You want to give Claude the tools and instructions" }, { "i": 143, "speaker": "Speaker 1", "text": "to get it into a loop. And once you kind of figure that piece out, all three of these" }, { "i": 144, "speaker": "Speaker 1", "text": "flavors kind of merge into one. You don't have to be very specific about the instructions" }, { "i": 145, "speaker": "Speaker 1", "text": "you give Claude. As long as it has all the right tools and instructions, it will be able" }, { "i": 146, "speaker": "Speaker 1", "text": "to verify all of these things." }, { "i": 147, "speaker": "Speaker 1", "text": "So, we've talked a lot about theory. And we've talked a lot about hypotheticals and jargon." }, { "i": 148, "speaker": "Speaker 1", "text": "But I wanted to..." }, { "i": 149, "speaker": "Speaker 1", "text": "To be a little bit more concrete. So, what does it actually mean to give Claude the instructions" }, { "i": 150, "speaker": "Speaker 1", "text": "and the tools to make it go in a loop? And it usually boils down to, like, four things." }, { "i": 151, "speaker": "Speaker 1", "text": "And I'll go through the frontend or UX section from this slide. The first thing is to run" }, { "i": 152, "speaker": "Speaker 1", "text": "your application. So, for a frontend application or a frontend verification loop, this might" }, { "i": 153, "speaker": "Speaker 1", "text": "correspond to running your dev server. So, running NPM run start or whatever your dev" }, { "i": 154, "speaker": "Speaker 1", "text": "server might be." }, { "i": 155, "speaker": "Speaker 1", "text": "It just spins up a dev server. Once the dev server is up, you want Claude to actually" }, { "i": 156, "speaker": "Speaker 1", "text": "use the web server. And the way it does that is by opening up a browser." }, { "i": 157, "speaker": "Speaker 1", "text": "My personal MCP tool of choice for this is the Claude in Chrome MCP tool. You can access" }, { "i": 158, "speaker": "Speaker 1", "text": "this with slash Chrome if you're using Claude code. You can also use Playwright or there's" }, { "i": 159, "speaker": "Speaker 1", "text": "a bunch of other, like, browser control MCPs that you can use to do that. Once Claude can" }, { "i": 160, "speaker": "Speaker 1", "text": "drive your browser..." }, { "i": 161, "speaker": "Speaker 1", "text": "The next step is to prove that something works. So, if it's a fix it's working on," }, { "i": 162, "speaker": "Speaker 1", "text": "you want to take a screenshot before the fix and after the fix and make sure that it's" }, { "i": 163, "speaker": "Speaker 1", "text": "the right state. Right? And finally, there's unblocking it. So, if you've ever tried to" }, { "i": 164, "speaker": "Speaker 1", "text": "create a verification loop in a production app, you'll very quickly find that there are" }, { "i": 165, "speaker": "Speaker 1", "text": "some blockers you run into." }, { "i": 166, "speaker": "Speaker 1", "text": "And some of the common blockers are, for example, auth and state. Right? So, auth" }, { "i": 167, "speaker": "Speaker 1", "text": "basically means, you know, you want to give Claude an identity that it can log into to" }, { "i": 168, "speaker": "Speaker 1", "text": "a web application so it can actually start to use your app. And then state means you" }, { "i": 169, "speaker": "Speaker 1", "text": "may want to preconfigure some state. For example, if you have, like, an e-commerce store, you" }, { "i": 170, "speaker": "Speaker 1", "text": "may want to populate the inventory for that store for Claude to be able to, like, use" }, { "i": 171, "speaker": "Speaker 1", "text": "your app meaningfully. And this isn't very novel. In fact, in traditional software engineering," }, { "i": 172, "speaker": "Speaker 1", "text": "when you write end-to-end tests," }, { "i": 173, "speaker": "Speaker 1", "text": "writing these state setup scripts are quite common." }, { "i": 174, "speaker": "Speaker 1", "text": "The only difference here is that" }, { "i": 175, "speaker": "Speaker 1", "text": "you want to give Claude access to these scripts" }, { "i": 176, "speaker": "Speaker 1", "text": "and you want to make them dynamic." }, { "i": 177, "speaker": "Speaker 1", "text": "You don't want to be too prescriptive" }, { "i": 178, "speaker": "Speaker 1", "text": "about what these scripts are doing." }, { "i": 179, "speaker": "Speaker 1", "text": "And that allows Claude to do a much wider variety of things" }, { "i": 180, "speaker": "Speaker 1", "text": "than you can do with static scripts." }, { "i": 181, "speaker": "Speaker 1", "text": "Okay, so we know what a verification loop now is." }, { "i": 182, "speaker": "Speaker 1", "text": "We know how to write one." }, { "i": 183, "speaker": "Speaker 1", "text": "How do you package it?" }, { "i": 184, "speaker": "Speaker 1", "text": "How do you distribute this script to your colleagues," }, { "i": 185, "speaker": "Speaker 1", "text": "to your coworkers, even to your future self?" }, { "i": 186, "speaker": "Speaker 1", "text": "And one of the best ways of doing this is by using a skill." }, { "i": 187, "speaker": "Speaker 1", "text": "You can think of a skill as just a way" }, { "i": 188, "speaker": "Speaker 1", "text": "to store some arbitrary context about a specific topic." }, { "i": 189, "speaker": "Speaker 1", "text": "And in this case," }, { "i": 190, "speaker": "Speaker 1", "text": "that topic happens to be a verification loop." }, { "i": 191, "speaker": "Speaker 1", "text": "The interesting thing about skills also" }, { "i": 192, "speaker": "Speaker 1", "text": "is that you can make them self-improving." }, { "i": 193, "speaker": "Speaker 1", "text": "So if you put in instructions into your skill" }, { "i": 194, "speaker": "Speaker 1", "text": "about improving the skill every time Claude hits a blocker," }, { "i": 195, "speaker": "Speaker 1", "text": "you will end up creating this self-documenting," }, { "i": 196, "speaker": "Speaker 1", "text": "self-improving skill, which everyone on your team" }, { "i": 197, "speaker": "Speaker 1", "text": "can contribute to, not just you." }, { "i": 198, "speaker": "Speaker 1", "text": "And this makes it really powerful." }, { "i": 199, "speaker": "Speaker 1", "text": "This is actually how we do verification" }, { "i": 200, "speaker": "Speaker 1", "text": "in the Claude Code team as well." }, { "i": 201, "speaker": "Speaker 1", "text": "We have a single verification skill," }, { "i": 202, "speaker": "Speaker 1", "text": "and the skill is explicitly told to keep documenting itself." }, { "i": 203, "speaker": "Speaker 1", "text": "So every time someone runs into a blocker," }, { "i": 204, "speaker": "Speaker 1", "text": "the skill will go back in and edit itself" }, { "i": 205, "speaker": "Speaker 1", "text": "so that next time when you or your colleague run into the same issue," }, { "i": 206, "speaker": "Speaker 1", "text": "it will go back in and edit itself. So that next time when you or your colleague run into the same issue," }, { "i": 207, "speaker": "Speaker 1", "text": "it's not a problem." }, { "i": 208, "speaker": "Speaker 1", "text": "Okay, so we're going to jump into a demo next." }, { "i": 209, "speaker": "Speaker 1", "text": "But before the demo, I want to talk about" }, { "i": 210, "speaker": "Speaker 1", "text": "what the application that I'm going to be using." }, { "i": 211, "speaker": "Speaker 1", "text": "There is a type tester application called MonkeyType." }, { "i": 212, "speaker": "Speaker 1", "text": "How many of you have heard of MonkeyType?" }, { "i": 213, "speaker": "Speaker 1", "text": "Okay, I thought so. It's a niche community." }, { "i": 214, "speaker": "Speaker 1", "text": "But it's basically a type tester" }, { "i": 215, "speaker": "Speaker 1", "text": "where it shows you a bunch of words, as you can see," }, { "i": 216, "speaker": "Speaker 1", "text": "and you have to type those words as accurately" }, { "i": 217, "speaker": "Speaker 1", "text": "and as fast as possible." }, { "i": 218, "speaker": "Speaker 1", "text": "And the application just tracks your stats for you." }, { "i": 219, "speaker": "Speaker 1", "text": "I like this as a demo app because it is representative" }, { "i": 220, "speaker": "Speaker 1", "text": "of a real-world full-stack app." }, { "i": 221, "speaker": "Speaker 1", "text": "It's written in TypeScript with an Express backend" }, { "i": 222, "speaker": "Speaker 1", "text": "and MongoDB and Redis as persistence layers." }, { "i": 223, "speaker": "Speaker 1", "text": "And it's open source, so you guys can go to monkeytype.com right now." }, { "i": 224, "speaker": "Speaker 1", "text": "You can even check out the source code if you want." }, { "i": 225, "speaker": "Speaker 1", "text": "But what we'll be doing in this demo is we'll be creating a verification loop live." }, { "i": 226, "speaker": "Speaker 1", "text": "So, you know, we'll tell Claude to spin up a new dev server." }, { "i": 227, "speaker": "Speaker 1", "text": "We'll tell it to kind of go and use the Chrome MCP" }, { "i": 228, "speaker": "Speaker 1", "text": "to check some of its work." }, { "i": 229, "speaker": "Speaker 1", "text": "And then once we create the verification skill," }, { "i": 230, "speaker": "Speaker 1", "text": "we'll also create a new feature and ask Claude" }, { "i": 231, "speaker": "Speaker 1", "text": "to use the verification skill to verify itself." }, { "i": 232, "speaker": "Speaker 1", "text": "So, let's get started with the demo." }, { "i": 233, "speaker": "Speaker 1", "text": "So we can switch over to my laptop screen." }, { "i": 234, "speaker": "Speaker 1", "text": "Okay, so this is a brand new Claude Coyle app." }, { "i": 235, "speaker": "Speaker 1", "text": "It's a new version of the Cloud Cloud app." }, { "i": 236, "speaker": "Speaker 1", "text": "It's a new version of the Cloud Cloud app." }, { "i": 237, "speaker": "Speaker 1", "text": "It's a new version of the Cloud Cloud app." }, { "i": 238, "speaker": "Speaker 1", "text": "It's a new version of the Cloud Cloud session." }, { "i": 239, "speaker": "Speaker 1", "text": "I've already done the homework of setting up monkeytype locally." }, { "i": 240, "speaker": "Speaker 1", "text": "I've also installed some dependencies and curated a CloudMD" }, { "i": 241, "speaker": "Speaker 1", "text": "because I didn't want to do that in front of you guys" }, { "i": 242, "speaker": "Speaker 1", "text": "and waste your time." }, { "i": 243, "speaker": "Speaker 1", "text": "So let's tell Claude to spin up the dev server." }, { "i": 244, "speaker": "Speaker 1", "text": "Okay, so it says the dev server is already running." }, { "i": 245, "speaker": "Speaker 1", "text": "And that's right because I started it right before our talk." }, { "i": 246, "speaker": "Speaker 1", "text": "And let's go and check out what's on the front end." }, { "i": 247, "speaker": "Speaker 1", "text": "So if we go here, monkeytype," }, { "i": 248, "speaker": "Speaker 1", "text": "it opens up, I can start typing," }, { "i": 249, "speaker": "Speaker 1", "text": "and there's a little timer that shows up." }, { "i": 250, "speaker": "Speaker 1", "text": "I'm not very good at typing," }, { "i": 251, "speaker": "Speaker 1", "text": "so there's a lot of typos here," }, { "i": 252, "speaker": "Speaker 1", "text": "but it's essentially what I would expect." }, { "i": 253, "speaker": "Speaker 1", "text": "Let's also check out the backend link." }, { "i": 254, "speaker": "Speaker 1", "text": "This just returns a JSON," }, { "i": 255, "speaker": "Speaker 1", "text": "and it just basically means that the backend" }, { "i": 256, "speaker": "Speaker 1", "text": "is up and running, which is good." }, { "i": 257, "speaker": "Speaker 1", "text": "The next thing I'm gonna do is I'm gonna make sure" }, { "i": 258, "speaker": "Speaker 1", "text": "that my Chrome MCP is," }, { "i": 259, "speaker": "Speaker 1", "text": "is enabled." }, { "i": 260, "speaker": "Speaker 1", "text": "And the way you do that is just slash Chrome." }, { "i": 261, "speaker": "Speaker 1", "text": "And as you can see here, it says status enabled," }, { "i": 262, "speaker": "Speaker 1", "text": "extension installed, which is exactly what we're looking for." }, { "i": 263, "speaker": "Speaker 1", "text": "If you don't have it installed," }, { "i": 264, "speaker": "Speaker 1", "text": "it'll take you to another setup guide" }, { "i": 265, "speaker": "Speaker 1", "text": "and you can install it for yourself." }, { "i": 266, "speaker": "Speaker 1", "text": "And now I'm gonna say, use the Chrome MCP" }, { "i": 267, "speaker": "Speaker 1", "text": "to make sure that the front end is working." }, { "i": 268, "speaker": "Speaker 1", "text": "Make it quick, please." }, { "i": 269, "speaker": "Speaker 1", "text": "And what we should see now is," }, { "i": 270, "speaker": "Speaker 1", "text": "is that this is the tab that Cloud is using," }, { "i": 271, "speaker": "Speaker 1", "text": "and it should call the Chrome MCP tool." }, { "i": 272, "speaker": "Speaker 1", "text": "So if you go back here," }, { "i": 273, "speaker": "Speaker 1", "text": "we can see two Chrome MCP tool calls." }, { "i": 274, "speaker": "Speaker 1", "text": "I can control O and see exactly what it did." }, { "i": 275, "speaker": "Speaker 1", "text": "So it navigated to localhost 3000," }, { "i": 276, "speaker": "Speaker 1", "text": "and then it's looking at the contents of the tab," }, { "i": 277, "speaker": "Speaker 1", "text": "which is great." }, { "i": 278, "speaker": "Speaker 1", "text": "But we wanna do something more exciting." }, { "i": 279, "speaker": "Speaker 1", "text": "Just looking at the, at a startup, we wanna do something more exciting. Just looking at the, at a startup, we wanna do something more exciting. Just looking at the, at a startup," }, { "i": 280, "speaker": "Speaker 1", "text": "static webpages isn't very helpful." }, { "i": 281, "speaker": "Speaker 1", "text": "So let's say, can you," }, { "i": 282, "speaker": "Speaker 1", "text": "actually, before I do that," }, { "i": 283, "speaker": "Speaker 1", "text": "I'm gonna resize these" }, { "i": 284, "speaker": "Speaker 1", "text": "so you guys can see what's happening in the background." }, { "i": 285, "speaker": "Speaker 1", "text": "Can you try typing and make sure everything works?" }, { "i": 286, "speaker": "Speaker 1", "text": "So Cloud apparently is also not very good at typing," }, { "i": 287, "speaker": "Speaker 1", "text": "but it typed in something and it says that typing works." }, { "i": 288, "speaker": "Speaker 1", "text": "And that's great." }, { "i": 289, "speaker": "Speaker 1", "text": "Let's do one more thing." }, { "i": 290, "speaker": "Speaker 1", "text": "say, can you also use the settings and change something?" }, { "i": 291, "speaker": "Speaker 1", "text": "OK, so it navigated to the Settings page," }, { "i": 292, "speaker": "Speaker 1", "text": "and it's changing the difficulty to Expert." }, { "i": 293, "speaker": "Speaker 1", "text": "Not a good idea, based on how it performed." }, { "i": 294, "speaker": "Speaker 1", "text": "OK, and it claims that the setting has persisted," }, { "i": 295, "speaker": "Speaker 1", "text": "and it's able to verify that." }, { "i": 296, "speaker": "Speaker 1", "text": "So that's great." }, { "i": 297, "speaker": "Speaker 1", "text": "What we did so far is we just held Claude's hand" }, { "i": 298, "speaker": "Speaker 1", "text": "and told it exactly what to do." }, { "i": 299, "speaker": "Speaker 1", "text": "So we were like, spin up the dev server," }, { "i": 300, "speaker": "Speaker 1", "text": "go and do these two or three things that we care about." }, { "i": 301, "speaker": "Speaker 1", "text": "And that's basically verification, right?" }, { "i": 302, "speaker": "Speaker 1", "text": "What I can do next is I can tell Claude" }, { "i": 303, "speaker": "Speaker 1", "text": "to take all the learnings from this session" }, { "i": 304, "speaker": "Speaker 1", "text": "and put it into a skill file." }, { "i": 305, "speaker": "Speaker 1", "text": "So I can say, take everything we learned" }, { "i": 306, "speaker": "Speaker 1", "text": "and put it into a skill file in top Claude" }, { "i": 307, "speaker": "Speaker 1", "text": "demo verification." }, { "i": 308, "speaker": "Speaker 1", "text": "I didn't have to give it the full path, but I chose to anyway." }, { "i": 309, "speaker": "Speaker 1", "text": "OK, let's see." }, { "i": 310, "speaker": "Speaker 1", "text": "It wants to create a new directory." }, { "i": 311, "speaker": "Speaker 1", "text": "OK, so it's now proceeding to write a fairly large skill.md" }, { "i": 312, "speaker": "Speaker 1", "text": "file." }, { "i": 313, "speaker": "Speaker 1", "text": "And if you look at what's inside this file," }, { "i": 314, "speaker": "Speaker 1", "text": "we'll just skim through it real quick." }, { "i": 315, "speaker": "Speaker 1", "text": "It says, number one, bring up the stack, which" }, { "i": 316, "speaker": "Speaker 1", "text": "is basically what we did." }, { "i": 317, "speaker": "Speaker 1", "text": "It has some commands to do that." }, { "i": 318, "speaker": "Speaker 1", "text": "So it has Docker Compose, blah, blah, blah." }, { "i": 319, "speaker": "Speaker 1", "text": "Then it loads up the Chrome MCP tools," }, { "i": 320, "speaker": "Speaker 1", "text": "because that's what we told it to do next." }, { "i": 321, "speaker": "Speaker 1", "text": "And then finally, there is a smoke test" }, { "i": 322, "speaker": "Speaker 1", "text": "where it's using the browser tools" }, { "i": 323, "speaker": "Speaker 1", "text": "to actually check its own work." }, { "i": 324, "speaker": "Speaker 1", "text": "So I'm going to go ahead and say yes." }, { "i": 325, "speaker": "Speaker 1", "text": "Great." }, { "i": 326, "speaker": "Speaker 1", "text": "So that must have looked quite simple, and it really is." }, { "i": 327, "speaker": "Speaker 1", "text": "Creating a verification loop is simple." }, { "i": 328, "speaker": "Speaker 1", "text": "There were a few blockers that came up along the way" }, { "i": 329, "speaker": "Speaker 1", "text": "when I was setting up this demo." }, { "i": 330, "speaker": "Speaker 1", "text": "We don't have to talk about those right now," }, { "i": 331, "speaker": "Speaker 1", "text": "but I'm sure that if you were to do this yourself," }, { "i": 332, "speaker": "Speaker 1", "text": "you can probably get this up and running within five to 10" }, { "i": 333, "speaker": "Speaker 1", "text": "minutes." }, { "i": 334, "speaker": "Speaker 1", "text": "What I'll do next is, because both Claude and I are so" }, { "i": 335, "speaker": "Speaker 1", "text": "bad at typing, I'm going to tell Claude" }, { "i": 336, "speaker": "Speaker 1", "text": "to make a confetti animation every time I mistype," }, { "i": 337, "speaker": "Speaker 1", "text": "and then use the verification skill that we just created" }, { "i": 338, "speaker": "Speaker 1", "text": "to verify its own work." }, { "i": 339, "speaker": "Speaker 1", "text": "So let's say every time I mistype, please." }, { "i": 340, "speaker": "Speaker 1", "text": "Let's show me a confetti animation," }, { "i": 341, "speaker": "Speaker 1", "text": "and use the skill that we just created to verify our work." }, { "i": 342, "speaker": "Speaker 1", "text": "So it's going to do its thing, figure out" }, { "i": 343, "speaker": "Speaker 1", "text": "where to write this code, and then hopefully the demo gods" }, { "i": 344, "speaker": "Speaker 1", "text": "will be with us tonight." }, { "i": 345, "speaker": "Speaker 1", "text": "So it wants to write some files." }, { "i": 346, "speaker": "Speaker 1", "text": "I'm going to switch on auto mode so it doesn't" }, { "i": 347, "speaker": "Speaker 1", "text": "have to ask me for every file edit." }, { "i": 348, "speaker": "Speaker 1", "text": "OK." }, { "i": 349, "speaker": "Speaker 1", "text": "This is interesting." }, { "i": 350, "speaker": "Speaker 1", "text": "So it created the feature, and then it" }, { "i": 351, "speaker": "Speaker 1", "text": "realized that there were a couple of lint errors." }, { "i": 352, "speaker": "Speaker 1", "text": "So you see there's like OX lint errors, too." }, { "i": 353, "speaker": "Speaker 1", "text": "And then it proceeded to fix those errors next," }, { "i": 354, "speaker": "Speaker 1", "text": "and then it's verifying itself again." }, { "i": 355, "speaker": "Speaker 1", "text": "So you see the verification loop in action now," }, { "i": 356, "speaker": "Speaker 1", "text": "where it wrote some code." }, { "i": 357, "speaker": "Speaker 1", "text": "It encountered some issues." }, { "i": 358, "speaker": "Speaker 1", "text": "It fixed those issues by writing some more code," }, { "i": 359, "speaker": "Speaker 1", "text": "and it kind of went in a circle doing that" }, { "i": 360, "speaker": "Speaker 1", "text": "until it came to a good state." }, { "i": 361, "speaker": "Speaker 1", "text": "So let's test it out ourselves as well." }, { "i": 362, "speaker": "Speaker 1", "text": "OK, it's still doing something." }, { "i": 363, "speaker": "Speaker 1", "text": "Let's let it stop." }, { "i": 364, "speaker": "Speaker 1", "text": "OK, so we do see the confetti showing up." }, { "i": 365, "speaker": "Speaker 1", "text": "It put us on expert mode, which is" }, { "i": 366, "speaker": "Speaker 1", "text": "why it keeps disappearing on me." }, { "i": 367, "speaker": "Speaker 1", "text": "But effectively, Claude was able to do the job." }, { "i": 368, "speaker": "Speaker 1", "text": "And fix its own lint errors." }, { "i": 369, "speaker": "Speaker 1", "text": "We're running short of time, so I'm not going to let this finish." }, { "i": 370, "speaker": "Speaker 1", "text": "But hopefully that gives you a taste" }, { "i": 371, "speaker": "Speaker 1", "text": "of how powerful a verification loop can be" }, { "i": 372, "speaker": "Speaker 1", "text": "and how Claude can continue to hill climb on a task" }, { "i": 373, "speaker": "Speaker 1", "text": "if you give it the right instructions and tools to do so." }, { "i": 374, "speaker": "Speaker 1", "text": "Let's switch back over to the slides now." }, { "i": 375, "speaker": "Speaker 1", "text": "The key takeaway here is you should try to hold Claude's hand" }, { "i": 376, "speaker": "Speaker 1", "text": "and show it." }, { "i": 377, "speaker": "Speaker 1", "text": "Show it how to do verification." }, { "i": 378, "speaker": "Speaker 1", "text": "And once you've taught it how to do verification," }, { "i": 379, "speaker": "Speaker 1", "text": "it can very easily summarize those learnings" }, { "i": 380, "speaker": "Speaker 1", "text": "into a skill file, which you can then" }, { "i": 381, "speaker": "Speaker 1", "text": "package and distribute for your future self" }, { "i": 382, "speaker": "Speaker 1", "text": "and for your teammates." }, { "i": 383, "speaker": "Speaker 1", "text": "OK, so now that we have mastered verification," }, { "i": 384, "speaker": "Speaker 1", "text": "we can graduate to multi-clouding or parallelizing" }, { "i": 385, "speaker": "Speaker 1", "text": "our work more effectively." }, { "i": 386, "speaker": "Speaker 1", "text": "But the problem that arises when" }, { "i": 387, "speaker": "Speaker 1", "text": "you try to run too many Claude instances at the same time" }, { "i": 388, "speaker": "Speaker 1", "text": "is that they all eat at your attention." }, { "i": 389, "speaker": "Speaker 1", "text": "And your attention is a scarce resource." }, { "i": 390, "speaker": "Speaker 1", "text": "I personally find that more than four to five sessions" }, { "i": 391, "speaker": "Speaker 1", "text": "open simultaneously takes a big load on my brain." }, { "i": 392, "speaker": "Speaker 1", "text": "And I can't really function beyond that." }, { "i": 393, "speaker": "Speaker 1", "text": "So what are some ways that we can scale that?" }, { "i": 394, "speaker": "Speaker 1", "text": "And what are some ways that some strategies we can use" }, { "i": 395, "speaker": "Speaker 1", "text": "to multi-cloud more effectively?" }, { "i": 396, "speaker": "Speaker 1", "text": "So there's four things that we'll talk about today." }, { "i": 397, "speaker": "Speaker 1", "text": "There's the Claude Code desktop app, which provides you a GUI" }, { "i": 398, "speaker": "Speaker 1", "text": "and makes it easier to manage multiple sessions." }, { "i": 399, "speaker": "Speaker 1", "text": "There is agent view." }, { "i": 400, "speaker": "Speaker 1", "text": "So if you love the terminal, like I do," }, { "i": 401, "speaker": "Speaker 1", "text": "and you want to stay in the terminal," }, { "i": 402, "speaker": "Speaker 1", "text": "then we have Claude agents that provide you" }, { "i": 403, "speaker": "Speaker 1", "text": "some of the same benefits of the desktop app" }, { "i": 404, "speaker": "Speaker 1", "text": "inside the terminal." }, { "i": 405, "speaker": "Speaker 1", "text": "You can also run Claude." }, { "i": 406, "speaker": "Speaker 1", "text": "Claude in the cloud." }, { "i": 407, "speaker": "Speaker 1", "text": "So if you run it on our website, Claude" }, { "i": 408, "speaker": "Speaker 1", "text": "is now running in our cloud as opposed to your laptop." }, { "i": 409, "speaker": "Speaker 1", "text": "And finally, there's remote control," }, { "i": 410, "speaker": "Speaker 1", "text": "which is my favorite feature." }, { "i": 411, "speaker": "Speaker 1", "text": "And we'll talk more about this when we get to it." }, { "i": 412, "speaker": "Speaker 1", "text": "So this is a screenshot of what the desktop app looks like." }, { "i": 413, "speaker": "Speaker 1", "text": "On the left, you have a sidebar." }, { "i": 414, "speaker": "Speaker 1", "text": "And the sidebar has all your sessions across all surfaces." }, { "i": 415, "speaker": "Speaker 1", "text": "So it has your sessions that are running locally" }, { "i": 416, "speaker": "Speaker 1", "text": "in the terminal." }, { "i": 417, "speaker": "Speaker 1", "text": "It has your sessions running in the cloud." }, { "i": 418, "speaker": "Speaker 1", "text": "It has your sessions running in all Git repos." }, { "i": 419, "speaker": "Speaker 1", "text": "And so it becomes the central control" }, { "i": 420, "speaker": "Speaker 1", "text": "plane for working with Claude and your sessions." }, { "i": 421, "speaker": "Speaker 1", "text": "You can also pin sessions." }, { "i": 422, "speaker": "Speaker 1", "text": "You can rename them." }, { "i": 423, "speaker": "Speaker 1", "text": "You can color your sessions differently." }, { "i": 424, "speaker": "Speaker 1", "text": "And all of these things effectively" }, { "i": 425, "speaker": "Speaker 1", "text": "are just solving the problem of grabbing your attention." }, { "i": 426, "speaker": "Speaker 1", "text": "If you rename a session to something" }, { "i": 427, "speaker": "Speaker 1", "text": "that's memorable to you, when you come back to it," }, { "i": 428, "speaker": "Speaker 1", "text": "you know what that session was doing." }, { "i": 429, "speaker": "Speaker 1", "text": "So these are all kind of ways to, you know," }, { "i": 430, "speaker": "Speaker 1", "text": "just make your attention more, protect your attention more." }, { "i": 431, "speaker": "Speaker 1", "text": "If you love the terminal, this used" }, { "i": 432, "speaker": "Speaker 1", "text": "to be how you would multi-claud." }, { "i": 433, "speaker": "Speaker 1", "text": "This is a setup of how I used to multi-claud, at least." }, { "i": 434, "speaker": "Speaker 1", "text": "I used to have a Tmux window manager with four panes." }, { "i": 435, "speaker": "Speaker 1", "text": "And each pane would work on a different work tree." }, { "i": 436, "speaker": "Speaker 1", "text": "This works, honestly, but it is a lot to manage." }, { "i": 437, "speaker": "Speaker 1", "text": "Who here knows what Tmux is?" }, { "i": 438, "speaker": "Speaker 1", "text": "OK, great." }, { "i": 439, "speaker": "Speaker 1", "text": "That's a lot of people." }, { "i": 440, "speaker": "Speaker 1", "text": "And who here knows what work trees are?" }, { "i": 441, "speaker": "Speaker 1", "text": "Great, about 50%." }, { "i": 442, "speaker": "Speaker 1", "text": "So you have to kind of manage work trees in Tmux yourself." }, { "i": 443, "speaker": "Speaker 1", "text": "Which works, and I think I'm used to it now." }, { "i": 444, "speaker": "Speaker 1", "text": "But it's also not the most convenient thing." }, { "i": 445, "speaker": "Speaker 1", "text": "We can do better." }, { "i": 446, "speaker": "Speaker 1", "text": "And what we arrived at was Claude Agents." }, { "i": 447, "speaker": "Speaker 1", "text": "This is a feature that we released, I think, a week ago," }, { "i": 448, "speaker": "Speaker 1", "text": "maybe a little bit" }, { "i": 449, "speaker": "Speaker 1", "text": "more than a week." }, { "i": 450, "speaker": "Speaker 1", "text": "And the way you access it is just, say," }, { "i": 451, "speaker": "Speaker 1", "text": "Claude Agents instead of Claude." }, { "i": 452, "speaker": "Speaker 1", "text": "And it opens up this view, which is" }, { "i": 453, "speaker": "Speaker 1", "text": "very similar to the desktop sidebar that we saw before." }, { "i": 454, "speaker": "Speaker 1", "text": "And this view lists all your sessions" }, { "i": 455, "speaker": "Speaker 1", "text": "that are running on your local computer." }, { "i": 456, "speaker": "Speaker 1", "text": "It also sorts them by the degree of attention" }, { "i": 457, "speaker": "Speaker 1", "text": "that they require." }, { "i": 458, "speaker": "Speaker 1", "text": "So if a session needs your immediate attention," }, { "i": 459, "speaker": "Speaker 1", "text": "and if it's blocked on, let's say, a permission prompt" }, { "i": 460, "speaker": "Speaker 1", "text": "or a question or some input that it needs from you," }, { "i": 461, "speaker": "Speaker 1", "text": "it'll show up right at the top." }, { "i": 462, "speaker": "Speaker 1", "text": "If a session is running or if a session has completed" }, { "i": 463, "speaker": "Speaker 1", "text": "its desired success state, it'll be further down." }, { "i": 464, "speaker": "Speaker 1", "text": "You can also customize it." }, { "i": 465, "speaker": "Speaker 1", "text": "So you can, again, pin sessions." }, { "i": 466, "speaker": "Speaker 1", "text": "You can rename sessions." }, { "i": 467, "speaker": "Speaker 1", "text": "You can reorder them." }, { "i": 468, "speaker": "Speaker 1", "text": "And again, this is a way to just manage your workload" }, { "i": 469, "speaker": "Speaker 1", "text": "and manage your attention a little bit better." }, { "i": 470, "speaker": "Speaker 1", "text": "Cloud Code on the Web." }, { "i": 471, "speaker": "Speaker 1", "text": "We've talked about this a little bit, but the main goal here" }, { "i": 472, "speaker": "Speaker 1", "text": "is, how do you decouple your laptop with your Cloud Code" }, { "i": 473, "speaker": "Speaker 1", "text": "sessions?" }, { "i": 474, "speaker": "Speaker 1", "text": "And I find it quite annoying that when" }, { "i": 475, "speaker": "Speaker 1", "text": "I'm walking from meeting to meeting," }, { "i": 476, "speaker": "Speaker 1", "text": "I have to have my laptop open and just walk" }, { "i": 477, "speaker": "Speaker 1", "text": "like this everywhere." }, { "i": 478, "speaker": "Speaker 1", "text": "When I'm driving back home, I'm also" }, { "i": 479, "speaker": "Speaker 1", "text": "annoyed because there's no internet," }, { "i": 480, "speaker": "Speaker 1", "text": "and I can't leave my laptop open in my car." }, { "i": 481, "speaker": "Speaker 1", "text": "So having your sessions be running in the Cloud" }, { "i": 482, "speaker": "Speaker 1", "text": "is really nice." }, { "i": 483, "speaker": "Speaker 1", "text": "You don't have to worry about the compute" }, { "i": 484, "speaker": "Speaker 1", "text": "that it's actually running on." }, { "i": 485, "speaker": "Speaker 1", "text": "And if you haven't given Cloud Code on the Web a shot," }, { "i": 486, "speaker": "Speaker 1", "text": "just go to Cloud AI slash code, and it's" }, { "i": 487, "speaker": "Speaker 1", "text": "pretty easy to get started." }, { "i": 488, "speaker": "Speaker 1", "text": "And finally, remote control." }, { "i": 489, "speaker": "Speaker 1", "text": "As I said earlier, this is my favorite feature." }, { "i": 490, "speaker": "Speaker 1", "text": "And remote control essentially gives you" }, { "i": 491, "speaker": "Speaker 1", "text": "the option to control any session running" }, { "i": 492, "speaker": "Speaker 1", "text": "on any surface with your phone." }, { "i": 493, "speaker": "Speaker 1", "text": "The way to get started with remote control is you just" }, { "i": 494, "speaker": "Speaker 1", "text": "go to wherever you're running your Cloud Code session" }, { "i": 495, "speaker": "Speaker 1", "text": "and say slash remote dash control." }, { "i": 496, "speaker": "Speaker 1", "text": "And once you do that, it will pop up on your mobile app." }, { "i": 497, "speaker": "Speaker 1", "text": "It will also send you notifications." }, { "i": 498, "speaker": "Speaker 1", "text": "So if Cloud needs some help from you or needs your input," }, { "i": 499, "speaker": "Speaker 1", "text": "your phone will buzz, and you could be in your car," }, { "i": 500, "speaker": "Speaker 1", "text": "you could be doing whatever you want," }, { "i": 501, "speaker": "Speaker 1", "text": "and you could just give Cloud the input that it needs." }, { "i": 502, "speaker": "Speaker 1", "text": "I am running short on time, so I'm" }, { "i": 503, "speaker": "Speaker 1", "text": "going to skip this demo, unfortunately." }, { "i": 504, "speaker": "Speaker 1", "text": "But I was just going to show you Cloud Agents" }, { "i": 505, "speaker": "Speaker 1", "text": "as part of this demo." }, { "i": 506, "speaker": "Speaker 1", "text": "So if you haven't given Cloud Agents a try," }, { "i": 507, "speaker": "Speaker 1", "text": "just give it a shot." }, { "i": 508, "speaker": "Speaker 1", "text": "OK." }, { "i": 509, "speaker": "Speaker 1", "text": "So we've talked about how to make Cloud more reliable" }, { "i": 510, "speaker": "Speaker 1", "text": "by making it or giving it the skills to verify its own work." }, { "i": 511, "speaker": "Speaker 1", "text": "We've also talked about how do you multi-Cloud more" }, { "i": 512, "speaker": "Speaker 1", "text": "effectively." }, { "i": 513, "speaker": "Speaker 1", "text": "But even that isn't quite satisfying." }, { "i": 514, "speaker": "Speaker 1", "text": "You still have to actually spin up a new session." }, { "i": 515, "speaker": "Speaker 1", "text": "You have to have a goal in mind." }, { "i": 516, "speaker": "Speaker 1", "text": "And whether it's on the desktop app or the terminal or web," }, { "i": 517, "speaker": "Speaker 1", "text": "you have to go and spin up a new session." }, { "i": 518, "speaker": "Speaker 1", "text": "How do you remove yourself?" }, { "i": 519, "speaker": "Speaker 1", "text": "How do you remove yourself from the loop even more?" }, { "i": 520, "speaker": "Speaker 1", "text": "And that's what this next session is going to be about." }, { "i": 521, "speaker": "Speaker 1", "text": "So as software engineers, we have a lot of different tasks." }, { "i": 522, "speaker": "Speaker 1", "text": "And not all of these tasks are writing code" }, { "i": 523, "speaker": "Speaker 1", "text": "for a specific new feature or a bug that you're working on." }, { "i": 524, "speaker": "Speaker 1", "text": "A lot of this is just bookkeeping in some ways." }, { "i": 525, "speaker": "Speaker 1", "text": "So personally, I'm spending a lot of my time" }, { "i": 526, "speaker": "Speaker 1", "text": "now babysitting my PRs." }, { "i": 527, "speaker": "Speaker 1", "text": "I think we all have a lot more PRs now that we're able to generate" }, { "i": 528, "speaker": "Speaker 1", "text": "of Cloud and AI." }, { "i": 529, "speaker": "Speaker 1", "text": "And these PRs need to merge." }, { "i": 530, "speaker": "Speaker 1", "text": "But before merging, you need to get through your review comments." }, { "i": 531, "speaker": "Speaker 1", "text": "You need to get through merge conflicts." }, { "i": 532, "speaker": "Speaker 1", "text": "You need to get through CI failures." }, { "i": 533, "speaker": "Speaker 1", "text": "There's a lot that goes on." }, { "i": 534, "speaker": "Speaker 1", "text": "And if you have like 20 or 30 of these PRs" }, { "i": 535, "speaker": "Speaker 1", "text": "you're trying to merge in a day, you" }, { "i": 536, "speaker": "Speaker 1", "text": "can easily end up spending hours on babysitting these." }, { "i": 537, "speaker": "Speaker 1", "text": "Updating docs is another good one." }, { "i": 538, "speaker": "Speaker 1", "text": "I think as we increase our velocity of shipping features" }, { "i": 539, "speaker": "Speaker 1", "text": "and shipping fixes, we also need to keep up with docs." }, { "i": 540, "speaker": "Speaker 1", "text": "Similarly, triaging, monitoring feedback," }, { "i": 541, "speaker": "Speaker 1", "text": "and just in general keeping CI green," }, { "i": 542, "speaker": "Speaker 1", "text": "these are all things that you kind of need to do every day." }, { "i": 543, "speaker": "Speaker 1", "text": "But they don't necessarily need you in the loop." }, { "i": 544, "speaker": "Speaker 1", "text": "They just need to be running in some sort of loop." }, { "i": 545, "speaker": "Speaker 1", "text": "And that's where the slash loop command comes in." }, { "i": 546, "speaker": "Speaker 1", "text": "So slash loop is a way to run a prompt" }, { "i": 547, "speaker": "Speaker 1", "text": "at a specific interval in Cloud Code." }, { "i": 548, "speaker": "Speaker 1", "text": "So you can say," }, { "i": 549, "speaker": "Speaker 1", "text": "slash loop 10 minutes and babysit my open PRs." }, { "i": 550, "speaker": "Speaker 1", "text": "And what this will do is the session" }, { "i": 551, "speaker": "Speaker 1", "text": "that's running this slash command" }, { "i": 552, "speaker": "Speaker 1", "text": "will wake up every 10 minutes." }, { "i": 553, "speaker": "Speaker 1", "text": "It will run this prompt." }, { "i": 554, "speaker": "Speaker 1", "text": "And if you have your Cloud MDs and your tools defined and set" }, { "i": 555, "speaker": "Speaker 1", "text": "up correctly, it will be able to figure out" }, { "i": 556, "speaker": "Speaker 1", "text": "what to do by itself." }, { "i": 557, "speaker": "Speaker 1", "text": "So you don't really have to be babysitting and monitoring" }, { "i": 558, "speaker": "Speaker 1", "text": "your PRs manually." }, { "i": 559, "speaker": "Speaker 1", "text": "Routines." }, { "i": 560, "speaker": "Speaker 1", "text": "Routines are basically slash loop but running remotely." }, { "i": 561, "speaker": "Speaker 1", "text": "So we talked about Cloud Code on the web before" }, { "i": 562, "speaker": "Speaker 1", "text": "and how that uses a remote container to run your sessions." }, { "i": 563, "speaker": "Speaker 1", "text": "Routines live and work in the same containers." }, { "i": 564, "speaker": "Speaker 1", "text": "The way you set up routines is by going to the web app" }, { "i": 565, "speaker": "Speaker 1", "text": "or the desktop app." }, { "i": 566, "speaker": "Speaker 1", "text": "You'll see a little routines tab out there." }, { "i": 567, "speaker": "Speaker 1", "text": "And you can set up a new routine quite easily." }, { "i": 568, "speaker": "Speaker 1", "text": "You can have a time-based trigger" }, { "i": 569, "speaker": "Speaker 1", "text": "or you can have an event-based trigger." }, { "i": 570, "speaker": "Speaker 1", "text": "And both of those triggers can lead to, you know," }, { "i": 571, "speaker": "Speaker 1", "text": "you can set up a new routine quite easily." }, { "i": 572, "speaker": "Speaker 1", "text": "And you can have a time-based trigger or you can have an event-based trigger." }, { "i": 573, "speaker": "Speaker 1", "text": "And both of those triggers can lead to a new Cloud Code session" }, { "i": 574, "speaker": "Speaker 1", "text": "opening up with a specified prompt." }, { "i": 575, "speaker": "Speaker 1", "text": "So for example, we have a routine that updates our docs" }, { "i": 576, "speaker": "Speaker 1", "text": "every day for the Cloud Code team." }, { "i": 577, "speaker": "Speaker 1", "text": "We also have a routine that looks at our issues and feedback" }, { "i": 578, "speaker": "Speaker 1", "text": "that's coming in and posts on our Slack channel" }, { "i": 579, "speaker": "Speaker 1", "text": "every six hours." }, { "i": 580, "speaker": "Speaker 1", "text": "So this can be quite useful to do kind of routine tasks" }, { "i": 581, "speaker": "Speaker 1", "text": "that, you know, don't necessarily require you in the loop." }, { "i": 582, "speaker": "Speaker 1", "text": "Cool." }, { "i": 583, "speaker": "Speaker 1", "text": "So once you stack all of these three skills together," }, { "i": 584, "speaker": "Speaker 1", "text": "you kind of end up at this system," }, { "i": 585, "speaker": "Speaker 1", "text": "which is able to do a lot of work" }, { "i": 586, "speaker": "Speaker 1", "text": "even without you having to manually be on your keyboard." }, { "i": 587, "speaker": "Speaker 1", "text": "And that really is the ultimate goal," }, { "i": 588, "speaker": "Speaker 1", "text": "is that you can kind of spend your attention and your time" }, { "i": 589, "speaker": "Speaker 1", "text": "on the tasks that you care about" }, { "i": 590, "speaker": "Speaker 1", "text": "and everything else can just be delegated to Cloud" }, { "i": 591, "speaker": "Speaker 1", "text": "and with high reliability and a high degree of confidence." }, { "i": 592, "speaker": "Speaker 1", "text": "Cool. So that's all I have for today." }, { "i": 593, "speaker": "Speaker 1", "text": "all I have for you guys. Thank you so much and I hope you enjoyed the talk." } ]