Scott Covert (00:00)
Today on Appsembly Line, we're releasing a special crossover episode from the Revenue Engineer Podcast hosted by Warren Walters. For those that don't already know, in addition to being the host of the Revenue Engineer Podcast, Warren is the founder and chief programmer path planning officer, or C3PO, of Cloud Code Academy, where he teaches AI and agents to folks starting their Salesforce developer careers. He is also a senior go to
Market systems engineer at Vercel but more importantly, he's a good friend and an all-around great guy. I recently joined Warren to discuss how I leverage AI agents and git work trees in my own workflow developing
on the platform as a Salesforce ISV. And although the conversation is a bit more technical than a standard episode of App sembly Line, I think the content will still resonate with a lot of viewers and listeners. So I hope you enjoy.
Warren Walters (00:58)
Here's the uncomfortable part nobody tells you about AI coding. The AI isn't the bottleneck anymore, you are. It writes code faster, then you can review it. And if you're only working on one ticket at a time, you're leaving a lot of that speed on the table. My guest today is Scott Covert, the founder of Tython. He's the builder of permissions assistants on the App Exchange, or I guess the Agent Exchange now, and the host of App Assembly Line Podcasts. He ships real managed packages.
for production orcs. Scott walks us through his parallel Salesforce development workflow using Git worktrees. And work trees are pretty much like copying your different repo into another folder, but with a lot of the amazing things of Git inside of it. So you never have to dig through your stashes anymore. Here's the part that makes it click for Salesforce in his workflow is that every work tree that he spins up has a scratch org associated to it.
So every ticket that he runs is associated with one specific directory. It's isolated and it is a really streamlined workflow for how he's able to spin up orcs and then merge them back all into main. At one point, he calls Git stash a junk drawer where you shove your work into. That lines up a lot with my experience with it, and I almost never go back to the things that I stash. So if your agents are spinning up work trees and you have no idea of what they're actually doing.
This is your episode to get control back. All right. Welcome everybody to another episode of Revenue Engineer. We've got a really awesome and interesting guest, somebody who I've worked with in the past. So very maybe we'll get into that a little bit. Like I've worked with you in the past a long time ago. And then now we are here on the podcast. So that was maybe what five, five, six years ago. Anyways, we've got Scott Covert here who is going to be walking us through some interesting AI workflows that he has been cooking up and working on.
So Scott, if I'm a Salesforce developer, a GTM engineer, if I'm somebody who is gonna watch this to the end, what am I gonna learn from this podcast?
Scott Covert (03:04)
First off, thank you so much, Warren, for having me on. Really appreciate getting to share with your audience today. My name is Scott Covert. I am the founder of Tython. We are a Salesforce ISV with a security and access management application called Permissions Assistant. It is security reviewed. We have a free tier and a free trial. So if anyone anyone listening is curious, they can check out our listing on the Agent Exchange by going to listing.
Dot permissions assistant dot com. I am also the host of App Assembly Line, the Salesforce ISV podcast that you have been gracious enough to join in the past. So yeah, so I'm I'm happy that I get to return the favor today. So thank you for having me on. And basically, what I want to chat about is how folks can use AI agents and git work trees in order to have a parallel development workflow to
increase their productivity. So the main key takeaway, I would say, is that in the the era of AI agents, now the engineers like us, we've become the bottleneck as these AI agents can write code far faster than we ever could. And so what folks are hopefully going to get from this if they watch to the end is see how they can get out of their own way and really explode their productivity by working on several different tickets at once using Git Work Trees and AI agents.
Warren Walters (04:31)
Yeah, this is a really cool topic, and I'm glad that once we started talking about the podcast and you brought this up, this idea, I was like, yes, I've been semi-dabbling in work trees in my workflow. I haven't, you know, seen how other people have been using it. So it was like, this is a perfect opportunity. Like, let's just talk about them. I barely know what like a git work tree is, but agent seems to be using it. So let's like figure it out and let's goof off together. So
Scott Covert (04:57)
Yeah. So
just out of curiosity, you want to take a guess at to as to when Git work trees were added as a feature of Git?
Warren Walters (05:07)
no idea I'm I'm semi gonna say that it's probably been around for a bit, but like I've never needed to use it personally. Like what whenever I'm coding, right, and I guess it's like pre AI, it was like one task, very focused in on it, and it's fine. And this is it seems like we can spin up multiple instances of our repo and our workflows, and you know, just have multiple streams going at the same time. So the
Do you know when how long this has been a feature?
Scott Covert (05:38)
Yeah, I so I looked it up because I was curious because like you, I it had not really been part of my flow for until fairly recently. They've been around though since twenty fifteen. But I just now yeah, so they've been around it for a good while, but I just think that they're having a moment now because with everyone leveraging cloud code, they really pair perfectly with working in parallel on several different features at once. Because I I think what you just described is how like
All like all Salesforce ISVs, especially really just dev shops in general, would work, right? You have a healthy backlog at a roadmap of features you want to add to your application. Software engineer pulls down, has a ticket assigned to them, checks out a feature branch, stays laser focused on that. And then when they're ready to have it looked at by another set of eyes, they might open up like a pull request and get a code review to have it merged in. That
has been a pretty popular get branching strategy and development workflow for a long time. I think one area where maybe some some members in the audience can relate to where it gets a little dicey is when you're laser focused on this feature branch and then a critical bug comes through from something that got flagged by a customer or someone a QA and suddenly you have to do a hotfix, that's when things can get wonky, right?
Warren Walters (07:03)
Yeah.
Scott Covert (07:04)
Suddenly now you've you're
Probably in this state, at least this is what's happened to me, where your feature branch is not ready to be checked in. And now you have to make a few decisions on how are you gonna start working on this higher priority ticket. I think there are a couple of different ways that some folks would handle it. The main one probably is just using git stash.
Warren Walters (07:23)
Yep. The stash and all my work. And then I forget. You know, I'll stash it, I will completely forget about that and just start over. But yeah, in terms of that workflow, it's happened a bunch of times to me where it's like I have to somehow hold on to this old work that I ha or this work that is still being churned on and not ready. And I'm like I'm sure Git stash is the correct
way of doing it, but oftentimes I'm sure I have just stashes that are out there that are long forgotten by now. Yeah.
Scott Covert (07:54)
It gets I it's clunky. It's Git stash is just like a junk drawer that you just shove a butt shove all your work into. And it also gets confusing when sometimes you have things that really shouldn't be checked into Git. So they just or they're part of Git ignored, like maybe you like a dot v or something, but you have made tweaks to it. Now it's just like untracked, but so it remains in the working directory. It just gets it gets clunky of using Git stash. Another thing that I think some people have
tried to do is just literally clone their working directory.
Warren Walters (08:27)
And in like another folder.
Scott Covert (08:29)
Yeah, exactly. So now you've got like like for us, we'd be working on permissions assistant. Now you've got like another permissions assistant directory on the engineer's machine. That that is also clunky, right? Because now you've got two clone git repositories that both have no knowledge of each other. Mm-hmm. And when it comes time to s to do a merge, there's you're very likely gonna run into some merge conflicts and it's gonna get really hairy really fast. So you might
It might make things easy on the front end, but you pay for it in the long run on the back end.
Warren Walters (09:02)
That's super interesting. So supposedly work trees can semi-fix this, right? Like if any in all the things that you've just described, I've done all of them. I'm assuming that people in the audience, right, have had the similar issue where they're like, they need to either hold on to some work or spin up another version of their code so that this can so they can do like another work stream, an additional work stream. So how can you know work trees
Help with this issue.
Scott Covert (09:33)
Work tree, what it's unique because it what it creates is like a sibling working directory. It's the best of both worlds. It creates a sibling working directory, sort of like what you're trying to do when you just clone the main or repos directory on your machine, but there's a shared instance of one Git database. So they know of each other. There's no and and there's actually you when you check out a branch as you create a work tree.
that Git will lock that branch. So it ensures that there's not going to be any any, you know, problem where people are stepping on toes as things are getting changed in multiple different work trees, if that makes
Warren Walters (10:14)
Right.
Scott Covert (10:15)
sense. So it gives like the best of both worlds because it gives you this isolated sibling working directory that still has knowledge of the main repository because it is all one shared Git database.
Warren Walters (10:25)
Okay, this sounds very cool. And I know that I'm like teeing you up as well. Like I've used it a bunch now and I kinda I like work trees and I've incor incorporated into my workflow. But this sounds very cool. Look can we see a demo? What does this look like in action?
Scott Covert (10:42)
Course. This is the Revenue Engineer podcast. What would it be without
Warren Walters (10:45)
Got it.
Scott Covert (10:45)
getting our hands dirty, right?
Warren Walters (10:47)
And I've gotta throw wrenches a as we're going through it and, you know, totally throw you off your whatever you have planned.
Scott Covert (10:55)
All right, we'll see. All right, so let me share my screen. So first off,
anyone that hasn't seen, I believe, episode one of the Revenue Engineer podcast, Jack Gimbert came on and you guys had a great conversation where he walked you through how he used Claud Code to build out this proof of concept application that will provide a weather forecast based on zip code.
Warren Walters (11:20)
Yeah, this looks very similar.
Scott Covert (11:22)
Yeah. So, you know, f anyone that needs maybe their memory jogged or didn't get a chance to see that episode. One, you should definitely go give it a a watch because it was a great conversation. But basically I took that video, I actually used claude code and fed it the video and said, recreate what Jack and Warren built because I didn't actually have Jack's repository to go off of. So this is technically a little bit different, but it's the same basic concept. So we've got
An application and a lightning web component that ultimately leverages this Apex class weather service. And similar to I think what you injected, it just uses very basic remote site settings for two different APIs. They're both these public keyless APIs. One takes in the zip code and returns latitude longitude information. The second one, the National Weather Service API, takes in that lat lawn and will give you back a forecast of weather conditions.
So these are those two endpoints. And here's the actual logic that's getting those current conditions by getting the lat lawn and then calling out to the National Weather Service to get the forecast. So pretty basic stuff, but I wanted to work through or a showcase to your audience, you know, how we at Python work on permissions assistant using Git work trees and AI agents. So I'll just let's first just like talk about the work trees again. So if I open up my repository or my terminal here.
And if I just do git work tree list, if I were to just do a list right now, we're only going to see the main branch in the main working directory that I'm actually in, this weather POC. But let's say I wanted to work on a new feature branch, you can easily just do git work tree add, and then you give the the path to where you want the sibling directory to live. So I'm just doing this kind of test case. So I'm just doing the scratch pad calling it scratch pad.
And you give it the branch name you want to call the feature branch you're working on in Git. So just calling that scratch pad. Now, if I were to do git work tree list again, I'm gonna see that that second work tree has been created and it lives over at that directory I had put in before. If I were to try now in this in the main branch or in the main working directory, I should say, if I try to check out the scratch pad branch, I'm actually gonna get an error. See scratch pad
Warren Walters (13:46)
Yeah.
Scott Covert (13:49)
And similarly, I could go and just CD it over to that other working directory. And here I have the same files that we were looking at before. I've got my Salesforce app for the weather POC. I could even open up another instance of Visual Code, a Visual Studio Code if I wanted to to work in a completely different environment. But oftentimes I honestly just work open up multiple instances of the terminal and that's how I'll work with it.
Warren Walters (14:14)
Really important thing to call out, right? So, like these are two folders or your application, like gonna air quotes like cloned down twice or put on your machine twice. One is the main branch version, and then the other folder, like you can literally go into them in your file system and see the scratch pad one as well. So, like there's that both of those versions are in there, and you can work on both simultaneously in the same terminal in different.
I started out with different IDEs, just like opening them up completely, but I think I've graduated to where you're at where like I'm just in terminal plugging away at either of them.
Scott Covert (14:52)
Yeah. It's a throwback to I mean, it's getting to the point where a lot of folks are, I think, are just gonna live in the terminal. you know, maybe even open up VS Code itself less and less. But that's kind of the power of these work trees combined with AI agents. So when you're ready then to actually merge back in what you've been working on, in your main working directory, you it's the same old thing you're used to doing. You run a git merge of whatever feature branch you're working on, or in this case, I think it was called scratch pad.
Obviously there's no commit, so there's nothing really to merge here. But you'd merge and then you can do git work tree remove. And then that's going to blow away that other directory and other work tree that was created in Git. So if I do a list, it's gone. Let me go ahead and figure this out. But yeah, let's get our hands a little dirty, right? Let's actually see how we could leverage this in our development. So
Jack and you built that really cool weather service proof of concept. In fact, I'm just gonna close the terminal for now. Similar to how Jack had used I to help him build out some user stories, I came up with just three basic features that could be added to what you guys started. One is getting extending the app to get like a five day forecast rather than just current conditions. Another is hardening a little bit the error handling.
To make it a little bit more production grade. And then the final was adding a lightning web component that lives on an account record so they can pull down the billing zip code for your account and actually share the current weather conditions for your given account. So you can know, like, I don't know, maybe you're calling up a customer and you can talk about have a quick way to break the ice because you know what the weather's like there. I don't know.
Warren Walters (16:41)
Yeah.
it's kinda cold over there, isn't it?
Scott Covert (16:44)
But so this represents right like three tickets that live in your roadmap that you could be working on at any given time. So I walked through how you can literally run the git commands for creating a new work tree. But an easier flow, right? Is I created some bash scripts and an NPM command that can automate some of the different commands that you're gonna want to do every time you work on a new feature branch. So here I'm gonna show this new work tree.
Script first. What this does is it checks it first checks out a work tree, just like I had done manually before, but then it goes a step further and sets up a scratch org and pushes all of our metadata to that scratch org and you know assigns the perm set associated with the project so that each individual work tree, each sibling directory is going to have its own target isolated scratch org that you can be doing development in.
So you're not working in one scratch org and trying to push all these different things that could conflict with each other. And so I run that from just this NPM command dev here. That's what it calls it. So let me just fire up basically a new AI agent to start working on this forecast task.
Warren Walters (18:01)
Yeah, and this is really cool. So it sounds like you know, from your workflow, it is I'm going to create a scratch award for each individual thing that I'm going to be working on. That's a little bit different from how I'm doing it right now, because I've got like a worn sandbox where I'm doing all of my destructive or I say destructive work. And then pushing that once it's like ready-ish, I'll push it to staging and do additional tests and move that. But there have been times where everything gets a little
mucky because I'm doing multiple things inside of that one sandbox. So the scratch or approach is really nice because then you you know everything is isolated for that specific work tree. Yeah.
Scott Covert (18:41)
Yes, exactly. And they're all getting their own nested SF directory, right? So they all are going to end up having their own default scratch org set up. So you're not even gonna accidentally be pushing to the wrong org if you just run an SF project deploy start command. Yeah, which I'll do in a second. So okay, sometimes it takes a few seconds. This was pretty fast. The scratch org is ready, the source was deployed. I'm gonna open up a new terminal and then jump into
That sibling work directory that was created. In fact, I'll just show that it was created over here, the weather POC, the feature forecast right there. Let me jump into that. Okay. And I'm gonna run an isolated Claude instance here. So now what I want to do we can I can do is just paste over the user story for this individual feature. So I already had that open. So and just have Claude go to town. Let me switch to
Auto mode, so we can just have them spread.
Warren Walters (19:41)
Let's go auto mode. Everybody says they're afraid of auto mode. I have defaulted my cloud to auto mode now. Like don't
Scott Covert (19:49)
I love it.
Warren Walters (19:50)
ask me any questions, just do it.
Scott Covert (19:52)
Mm-hmm.
so this is so this normally right like I don't know about you, but this is when I would go to just reach it for my phone, mm-hmm, check my email, go to LinkedIn. Like this is a downtime normally.
Warren Walters (20:06)
You're
just waiting for it to do its work and you're you know, you'll check it at the end, whatever.
Scott Covert (20:11)
Yeah. In fact it reminds me of Salesforce development a while back if for for any listeners that are more Maven's me.
Warren Walters (20:18)
Let's go maybe and do that deployment, send it off and just pray that it actually works.
Scott Covert (20:24)
I loved Maven's because it was just so perfect when you would run deployment, it would spit it would open up a modal where you could play. Yeah, I believe it was either
Warren Walters (20:34)
Man.
Scott Covert (20:35)
Tetris or Donkey Kong because the metadata API was so slow back then that literally you were just waiting for you know, you update like a color on a lightning component and you're just waiting for five minutes for the
Warren Walters (20:47)
Liney web components didn't even exist back. So it would have been a point. I'm forgetting this Visual
Scott Covert (20:52)
Yeah.
Warren Walters (20:53)
Force page. I'm very curious if anybody in the chat is any of that. I feel like it's all fresh faces. But yes, there was just now a as we're waiting here for Cloud to do its work and it took a minute and a half, which I'm surprised you know, it did finish pretty quickly. There were there used to be a lot of downtime in set like we're like going back to that. But now we can do multiple things, which is pretty cool.
Scott Covert (21:17)
Yeah. So I'm gonna open up just another terminal because I just want to leave Claude and just run some commands. Just I don't know if we'll see if Claude got it right on the first try. I'm not sure. So I'm gonna open up a new new terminal just in case. But let me go back to the actual working directory actual work tree for our new feature. I'll open up before I even run a deployment, I'll open up the scratch or and again it's pointed to the default of the new scratch or it created. So it's not
When I eventually run multiple features at once, the work trees are going to be point out their own individual scratch orgs by default. No risk of accidentally d deploying to the wrong org here. See, we got here's how our proof of concept app looks, where you and Jack left off. Yep. put in I think this is Miami, if I if memory serves. Yeah. So looks like they got a chance to showers and thunderstorms. Maybe put in a Durham area, a zip code where I am.
Slight chance of showers and thunderstorms that seems to match what I saw this morning.
Warren Walters (22:18)
Sure.
Scott Covert (22:19)
So now let's go back and actually push the deployment. You can see we're only really just getting the current weather conditions. And what we wanted was now to have a five day forecast. So let's go ahead and deploy those changes.
Warren Walters (22:31)
I find this very curious. Like you're actually manually going in and pushing the chain. It might just be for the demos, but I may have gotten so lazy that I have Claude to push these deployments and even check the work itself. Yeah. Make sure that it's going through.
Scott Covert (22:48)
I wanted to specifically slow things down. Like I even have at the end here until it's deployment. Yeah. But yes, normally I mean, you can really just keep stacking. That's what's great on this this workflow to just be more and more productive, like automating the deployment, automating some of the tests, all that kind of good stuff. So all right, well now that's been pushed. So I'm gonna go back to the scratch argument. Let's see. We should hopefully get you know a five day forecast. It we'll see if Claude got it right on the first try. there you go. Okay. Let's see, that's my weekend looking.
I'm not exactly loving the forecast, although I'm
Warren Walters (23:21)
Yeah,
and not great, but it looks like it's working, right? Yeah.
Scott Covert (23:25)
It's working. So that's cool. Congrats, Claude, for getting it one one go. That was just I wanted to run through, you know, how we could leverage work trees. But you might notice, like I still stayed focused on a single branch. Yeah. This whole time. Right. So this is not really the workflow that I'm proposing listeners should maybe be moving toward. So first let me close out the f this terminal. And congrats, Claude, you got it. So we're gonna exit out of this guy.
I'm going I also built a bash script for just tearing down development when it's complete. So basically deleting the work tree, deleting the scratch org, making sure that everything's clean once everything's been merged in. So normally I would have checked in a commit based on the changes from that feature branch. And then over in my main work directory, that's when I'd merge in that feature branch. And then then it could run my reset script here. but
I'm gonna go ahead and just run the reset script without checking any of those changes in. Now again, I should see the work tree's gone. Yeah, I just see the original one.
Warren Walters (24:32)
Nice.
Scott Covert (24:33)
Wait, let's make it a little bit easier to see. And it also deleted the scratch work. So over here, if I refresh, I should get an error. There we go. Okay, so that would be
Warren Walters (24:42)
Yeah.
Scott Covert (24:43)
that's essentially really just using work trees for the sake of using work trees, but ultimately still one feature branch at a time. And that's we're trying to move to this parallel development workflow.
So I also have this npm command that will just r create new work trees for all the different features that I have listed out here in my different user stories. So again, you the first one was getting the five day forecast, another one was getting better error handling, and then the last one was adding a weather card to the account object. So let's see. I have not tested this before, so I'm curious. Let's go.
Warren Walters (25:19)
Testing in production, testing live. go for it, yeah.
Scott Covert (25:22)
Those are running
and now I do have this command that will just give me a status, the scratch rugs themselves, so that we can see when they're ready for us.
Warren Walters (25:32)
And once again, this is like you you think of your work stream, you probably have multiple tickets, a bunch of things in the backlog. Now this is, hey, let's try to spin up a work tree and work on multiples of these at the same time. Instead of just focusing on one, we're doing a bunch of them. Or at least in this example, we're doing three.
Scott Covert (25:53)
Yeah, we got three. But honestly, this is just we're still the band we're still the bottleneck, but at least, you know, we're not as bad as we were before if we're working on multiple tickets. But there's no reason why you can't be working on more than three. You can be working on five. I guess eventually you start hitting limits of how many daily scratch orgs Salesforce will let you create.
Warren Walters (26:10)
Was it thir thirty tickets is your limits for how many you can spin up. And by that time, I doubt you're actually, you know, focusing in on all of these.
Scott Covert (26:19)
Yeah. All right. So let me go over to the our different work trees. So I'm gonna go first to the forecast one and I'll open up quad there and I'll paste in our user story. I'm then gonna open up another terminal and here I'm gonna go to the hardening going on this. And you know where this is going, right? Gonna go to the other work tree. Yeah.
Warren Walters (26:45)
Yeah.
And while you're doing that, I see we do have a question here on does Git worktrees work with GitLab? I'm gonna say yes. There is technically a difference between git the repository software that does all of the branching and storing and all of that stuff. And a lot of that technically happens locally, right? So the feature of work trees lives inside of Git. But where you store these in the cloud, right? If it's GitLab, if it's GitHub, all of those things, it that's like
It's just the where you store the repository. So it's technically different from week it's interchangeable, right? You can use Git with GitHub, GitLab, or Bitbucket, any of those things, whereas, you know, the cloud hosting is just a little bit different.
Scott Covert (27:31)
Yeah. Well put. It's a feature of Git. So really should I we personally use GitHub, but it really should be fully supported by GitLab because it's less about where you're actually remotely hosting your repository and more about just a feature of Git itself. Yeah. All right, so let's see. I got all of these in YOLO mode. This one is in about 40 seconds. We're just got we're they're just all racing each other now, basically. So
Instead of, you know, you you spin up a new cloud session, you put in your requirements, instead of just sitting there waiting, you then go look at another ticket you could pull down. Mm-hmm. And so on and so forth.
Warren Walters (28:08)
So this is pretty cool. So this one is that one that finished. Can you right now we're able to test it out and to see if it actually finished or if it worked? Because it's in its own isolated scratch org and we can do like SF open and all of that stuff to see it.
Scott Covert (28:26)
Let's do it. Let's do it. I think the other two did oops, let's see. Done.
Warren Walters (28:28)
This one's coming in too many.
Scott Covert (28:30)
It's taking a little longer than the second time.
Warren Walters (28:33)
Yeah.
Before you do this though, can you actually go back to it? Because I'm gonna I guess show other people a different way. Or do like how I'm gonna do it, right? So let's ask Claude, can you open up the org for me? And or what do we need to do first? Deploy it?
Scott Covert (28:51)
Okay. Like
Warren Walters (28:53)
And you may have been getting here.
Scott Covert (28:55)
And we Curesville do it 'cause they told it not to. Yeah it'll be
Warren Walters (28:57)
Well
you know it's the next step of kind of like where you can go with these flows is hey instead of me running those terminal commands, can you deploy this and then open up the org? And I think I can even open up specific pages in the org, but I like that one's a little iffy, a little finicky. But yeah, I think it depending on how comfortable you are with the specific commands, right? You can either go through the terminal like we saw before, or you know, going through it in here.
The other thing I wanna call out too is have you been using like the exclamation point to run terminal commands in Claude? Or do you normally open up another terminal? So put an exclamation point in there. here it is. It's opening up the org for you. Which is sweet. Like this is great. Yeah.
Scott Covert (29:42)
No.
I'm not familiar with what you're talking about though, so I'm curious to hear.
Warren Walters (29:44)
Yeah,
we'll check that out in one second. And it might like for for whoever and this is why I like doing this is because it shows like there's so much going on and different work screens, different things, features that people are learning. So like I learned a couple things already from what you're talking what you're going over here versus, you know, some of the other things that I'm about to show you, like the exclamation point commands and all of that stuff, which you may have not seen before.
Scott Covert (30:10)
Yeah. Okay. I'm excited to see that. So here's the main proof of concept, right? But this this feature branch was about adding a new lightning web component to the account page. So let's go over to accounts and let's create a new account. Let's Duke University. Let's give it a belling zip code. And then let's see. I don't have to added it to the page because I'm not seeing
Warren Walters (30:34)
Mm-hmm. I struggle a lot with like flexi page stuff.
Scott Covert (30:37)
What interesting okay. I could should I what do you think? Should I help Claude out or should I just try and give it one more go?
Warren Walters (30:45)
Yell at it and tell it to do it right because now while it's thinking, we can just flip to the other one and test out a d you know, test out the other one. That's true. And like that's this that's the work streams that you can get into now. Yeah.
Scott Covert (30:59)
Yeah.
Warren Walters (31:02)
No way, I don't want to do it. Literally. And this is where like this the your claw.mds come into play. I've outlined it enough now, at least the claw mds I'm working with, to know, hey, you need to
add this to the Flexi page, which means you might need to pull it down yourself, add it to the page, or create a new page and then upload it and go through all that process, right? The same process that I guess like we would have to do if we were doing this all through metadata. Yeah.
Scott Covert (31:29)
Okay, so let's that's a great idea. I'm I'm gonna yell at it and then jump to another card. while that's going, let's go over now maybe to this error handling. Okay.
Warren Walters (31:42)
So while that's going on, can you click the five day one again? Yeah. If you haven't seen there, you can do ex exclamation point and it will basically flip to the shell at a terminal and you can do all those same deploy commands, everything that you know had right inside of here. And then Cloud will actually get context of the commands that you're running. If you want to, you know, do this one and do it manually, you know, this will actually do the deployment as if it was in that terminal for you.
So hopefully that you know adds in, speeds up anybody's workflows, processes, and then yeah, all that context kind of stays in there as well, which is very nice.
Scott Covert (32:20)
Yeah. I love it. So yeah, I love you mentioned like the markdown files, right? And having your Claude MD. I specifically this repo is very bare bones, which and it is I can show the URL with listeners. It is on my on my GitHub if anyone wants to check it out and play around as well. All right. So this now is the hardening org that was opened up, right? And then this was there was one that was opened up through I think the five day through the the new shell node that you showed me. Mm-hmm. So
question is which.
Warren Walters (32:51)
no, this one that one had the Duke weather on it. Look, the weather component, which means I guess that's the first one and it's actually working now and it like it figured it out, it's fixed itself. Whenever things like that happen, it like as soon either I have to press escape to stop the operations or I need to steer it in the right direction, I'm instantly thinking, like, hey, I need to update one of my
Agent files, right? If it's the claw.mds or whatever like steering I have for it, that's like a trigger that goes off in my head whenever it doesn't do the correct thing. Cause then the next time it should get it right.
Scott Covert (33:28)
Yeah. No, this it so this is great. And you're right. It definitely is the same as you can see in the URL, it's that same drive flow. And it's there. So I think maybe two prompts now, but Claw got it. And then this is likely the I don't know wh which one this is. Let's go check it out.
Warren Walters (33:44)
Yeah, I think that's the hard part now is like somehow I know we can't pick scratch org names, but I would love to imagine if we could put that URL in or the the like the name of the branch as the scratch word name or something like that. That'd be really nice. Bash script. No the bash
Scott Covert (33:58)
I suppose you could the script
that I created, it checks out the work tree first. Mm-hmm. But you could have it create a scratch org and then create the get work tree and then set the default org, I suppose. It's probably a little better to do the work tree first, but there's you there might be ways to do it. And you know what's great about this is the reason part of the reason why I wanted to build upon what you and Jack did in the first episode.
Is to showcase that like everyone is always standing on the shoulders of the giants before them. Right. And there was this, I remember there's this article that came out years and years ago, and it was talking about people that didn't grow up with technology and being more concerned with like, you know, pushing the wrong button and breaking something. And there in the article, the author was talking to his mother and she was like, I'm afraid of I'm afraid of like pushing the wrong button and breaking something. He said to his mom,
You have to push all the buttons. That's how you learn. That's just how you figure it out. And I feel like we are now going through that with AI. Like everyone is just learn going through this like kind of joint learning session together. So it's I don't know, it's a of fun. Okay. So I want to actually I think this was the error handling. So let me put in like a bad so see what happens here. And
Warren Walters (35:17)
Nice.
Scott Covert (35:18)
let's see how does it compare now in the other scratch org if I go back. Okay. Dereferencing
Warren Walters (35:22)
Okay.
Scott Covert (35:23)
another object is not good.
Warren Walters (35:25)
User friendly and all So that's perfect.
Scott Covert (35:27)
Yeah. So we're getting a little bit improved here. It's I think it probably could be a little bit better. Like maybe we can ask you to give a a toast or something.
Warren Walters (35:34)
Yeah. Right. And like that's super nice. And you just throw that in there and it's gonna go off, work it, and then be done.
Scott Covert (35:42)
Yeah. And then so back on this five day, I think I told it to deploy, but I didn't tell it to open, right? So you're saying I can do bang and then do SF or it open. And now they should pull up a third scratch door we hadn't seen yet. Looks like it did innovation business.
Warren Walters (35:59)
Nice.
Scott Covert (35:59)
Go over to our weather POC again. And here we should be seeing that five day forecast, which unfortunately is calling for a lot of rains. Yeah. A lot of rain and showers.
Warren Walters (36:10)
And
there are flash floods where I was li you know where I'm at, so hopefully you guys don't have any flash floods.
Scott Covert (36:16)
Yeah.
Warren Walters (36:17)
This is perfect.
Scott Covert (36:19)
Yeah, so let's see. This is our last thing. all right. It's done. Let's go ahead and refresh the page. There we go. Weather lookup failed. All right. We got a little bit better toast message. So nice job, Claude. Okay. Now we could go into each of our different work trees. We could create a commit for all those different feature branches. And then we could merge them back into our main org, right? So let me just let's see. I'm in the weather card. Let's see what all we added.
Hold in the object, fluxy page for the account. What object do we have to go create?
Warren Walters (36:52)
The slash object.
Scott Covert (36:54)
I'm not in I'm sorry, I'm not in the working directory. I'm in I'm just in the terminal. So yeah.
Warren Walters (36:59)
Yeah, so here we're gonna go back and potentially re add everything that we need so that you know we just have our our final main branch that we're gonna be working on. Because now it's exactly we have all these individual pieces. How do we then merge them all back to our main branch so that you know everything so it's so that we can do a final push or push it to staging or whatever? Because yeah right now everything's in our individual ones.
Scott Covert (37:27)
So normally
I would just add a new commit for each of these different feature branches and merch them in just like you said. Mm-hmm. But what do you think, Warren? Should I op maybe I should open up a new cloud in our main branch?
Warren Walters (37:40)
Yeah, let's do it. Let's do the main one and just like cause now we're in main, right? This is our main terminal. Let's just see if Claude can it should be able to find all the work trees, merge everything, like commit and merge everything back to main.
Scott Covert (37:54)
Yeah, all right, let's put it back in YOLO mode. I created three works on with
Warren Walters (38:02)
And this is cool. So like we're adding on to this and th this is where I'm at now. Like you can continue going on here and pushing this back through, but this is where I'm at now where it's hey, Claude, spin up the work trees, and then also once it's done, excuse me, merge everything back in and put it together. So ideally it should find it. I don't know if you can close left panel and you know, let's take a look at it working in here. So yeah, it should be able to pull all of those. I can see, you know, through the
Through those commands that are coming through. I see the hardening one. So it's definitely identifying the correct work trees and repos. One of the things I'm curious about, and I think that you've solved, Scott, is like work tree sprawl, is what I'm calling it, right? So like you've got three of these created now, and I've been to a state where I've got like six or seven work trees like floating all around, and it makes my git very messy when I'm looking at it.
And I I think you've kind of solved that with the scripts of the reset scripts and all of that stuff. So how is that how you normally deal with that or do you have anything else that you kind of do for that?
Scott Covert (39:05)
Yeah, this is like sorry for the spoiler alert, but the movie did come out like forty plus years ago. But this is like Arnold lowering himself down to destroy the last chip here. Like the last piece of the puzzle is destroying the work trees, removing them and then you know moving on to the next the next feature branches or the next features that you gotta build out. we had some merge conflicts. Okay. Where's what's what Maine is now six minutes, but not pushed. Still exists if you want them cleaned up.
All right, let's I'm curious how well I'm gonna turn and see. Let's just see the status here. All right, we merged in the weather card, merged in the five-day forecast, and we merged in hard it. it took care of the merge conflicts for us.
Warren Walters (39:46)
Well that's
Scott Covert (39:46)
this is great. Okay, let's go. Here, let me I pushed or I created some dummy scratch rugs so let's just do deploy to one of my dummy ones.
Warren Walters (39:57)
Okay. Cause yeah, now all of this stuff is not in a specific scratch org. It's in your main branch. And then we need to then put it to a scratch org, like make sure it deploys successfully and everything is there. Like a final test. And this is essentially acting as your like staging or your next the next like dev sandbox, your integration sandbox where you need to test everything.
Scott Covert (40:20)
Exactly. This is my QA where I'm doing integration testing before doing like before merging in a maybe a release candidate branch for a brand new version of of our application.
Warren Walters (40:30)
Yeah, and I gotta remember that you sit in the ISV world. So you've got all these packages and release candidates and I mean after I did that at Blackthorn, I was like, I get it. I know why all these things exist, but it is very complicated. And one thing you might be able to touch on as you're pulling this up, right? Somebody asks, like, when you're in a production org, you have a lot of you might have a lot of dependencies that you deal with. So one way that you can
Since your scratch org is blank, but your production org has like packages and all that stuff. One way you can do is since you have all the metadata for your org, you just bring it over. But another way that you can do that is using a package like Cumulus CI to redeploy your packages and s configure. It's a lot more configurable setup for the after parts of your process, right? Or setting up your org. And it's all scriptable, right? So it helps in that sense. But I think Chase mentioned this as well, like.
A a lot of times when you are developing in your scratch orgs, you may not actually have those dependencies that you think about. Are you really using CPQ or whatever? so you have to consider that in what you're creating when you're spinning up the scratch org.
Scott Covert (41:45)
Yeah. Hundred percent. Okay, so I'm in this new scratch org. You maybe noticed I had to assign the perm set to myself because I had forgotten about that. But got the five day forecast. Let's keep it an invalid zip code. Got the toast coming up, and let's go create that account and see if it's on the page.
Warren Walters (42:01)
Nice. Yeah, and so far it seems like everything is working, everything has been pushed through to this final scratch org. And like you can imagine you could have a CI C D process that creates this final scratch org once things are merged in. And yeah, there's the local weather, you know, all created in there.
Scott Covert (42:21)
Yeah, there are a lot different ways to skin the cat and there a lot of ways to enhance on this. So I'm hope I'm hoping that you're gonna have a future episode where someone comes on, picks up where we left off here, and adds even further. But for anyone in the audience that you were saying that we're at if anyone wants to play around, they can check out my GitHub, Scott B Covert, and it's just weather dash POC. And they can run through all the different things we did together. For anyone, you know, I mentioned the top of the show that's interested in our Salesforce Security.
An access management app, check out permissions assistant. It's at listing.permissions assistant dot com. Or Warren, if you want to come back on Assembly Line, you're always welcome. Or for any other South Force ISVs, definitely give us a listen or reach out if you want to be a guest. Questions
Warren Walters (43:06)
Yeah.
Scott Covert (43:08)
from folks in the audience about what we talked about for parallel development?
Warren Walters (43:11)
Major questions, I think we answered them. I see Brian's here asking questions like do you use scratch orgs to leverage this work tree functionality apart? yeah, okay. So yes, Brian, I know you missed the first couple of 30 minutes or a couple intro sections. So Scott is using Scratch Orgs to spin up individual work tree sessions and like linking them together, which is really cool. When I've used work trees, which I do a lot right now in my workflow, I just point everything to
a like sandbox org that I'm working in. But now that I'm seeing this process, I'm like, this makes a lot of sense. And it's it's very clean, it's very isolated and works really well. Anything to add to that, Scott?
Scott Covert (43:52)
Yeah, I mean there's no reason why you can't also be leveraging a similar tactic with sandboxes. You could certainly spin up a number of sandboxes. I think that the more difficult part would be the teardown, right? So I didn't do that actually for all of them. Now that we you know we checked out, made sure that everything's working out. We've merged all of our our different branches together. I do have this dev reset that's gonna kill all the other scratch or it's gonna kill the work trees.
Warren Walters (44:20)
Nice.
Scott Covert (44:20)
That might be a little bit more clunky when you're dealing with sandboxes, right? In you know, in theory you could tweak this to work with sandboxes too, if that's your preferred demo.
Warren Walters (44:29)
Yeah, and I just let my sandboxes get very messy and then just blow them away and reset pretty much everything after a couple after a week or two. So yeah, it's different different ways of doing the same thing, which is really awesome. I'm curious, anybody have any additional questions? I see Tom throwing out here that he's been using Claudette and CMUX. I've heard about Claudette, at least from Tom himself, talking about it. I have not used it myself, but
As far as I understand, it's another like workflow or agentic, I'm gonna say like streaming tool. Cause you can throw your tickets in, it's gonna spin up a work a work tree for it. And you do all of your it does all the work and then it throws it back into Maine. But I have not tested out myself. So Tom, if you wanna come on and talk about Claudette and this workflow, like I'm very curious to have you on.
Scott Covert (45:22)
Yeah, this is my first time hearing about it. Sounds awesome.
Warren Walters (45:24)
Cool. Yeah, Riley's also mentioning that they're using scratch orgs and work trees and he's a fan of Claudette as well. So may this is something that I need to check out.
Scott Covert (45:35)
for the folks on the it sounds like a lot of folks are using work trees which is great. I'm curious if they're like us, Warren. Have you guys were you were you all using work trees before before AI HNTIC development? Or did you come into using them like me in the era of cloud code? 'Cause
Warren Walters (45:52)
Waiting for a response.
Scott Covert (45:54)
I didn't even know that they existed.
Warren Walters (45:56)
I I too did not know that they existed. Riley's saying the AI f forced him so yeah to learn it. Chase is saying that he has kind of gone through the exact same scenarios and but he's used them before. So yeah, very cool stuff. Scott, I appreciate your time and coming on and showing this workflow. Everybody you've got I'll be linking a ton to to permissions assistant to Scott's LinkedIn.
And his podcast as well. So very just an amazing person to know in general if you've if you're not following him in in that orbit around for the content that he creates. Scott, any final words, anything that you wanna send off for everybody?
Scott Covert (46:39)
Yeah,
I just want to say thank you again, Warren for having come on. This was a lot of fun, as I knew it would be. And as you said, anyone that wants to follow up with me or have the has any other questions, I'm very active on LinkedIn, so please feel free to connect and reach out.