00:00:12.240 --> 00:00:15.640
Welcome to the Bikeshed podcast where we talk about all things software engineering
00:00:16.020 --> 00:00:19.480
and where our sprint retros somehow always run longer than the sprint itself.
00:00:20.440 --> 00:00:26.260
I'm your co-host, the guy with 17 different browsers open but still can't replicate the bug, Scott Kaye.
00:00:27.060 --> 00:00:35.780
Alongside me are my co-hosts, a man whose Slack status just says, in a meeting, 24-7, and somehow it's still accurate, Matt Hamlin.
00:00:36.750 --> 00:00:44.560
And my other co-host, he stamps his own PRs, bypasses CI, skips the pipeline, and deploys his code straight to production.
00:00:45.220 --> 00:00:46.640
He is continuous deployment.
00:00:47.270 --> 00:00:49.380
Dillon, spicy, take, curry.
00:00:50.060 --> 00:00:53.000
Dillon, Matt, what's cooking on the agenda today?
00:00:55.220 --> 00:01:01.480
All right, today, Scott, we're going to talk a little bit about skills and not the skills
00:01:02.060 --> 00:01:03.940
from before 2024.
00:01:04.360 --> 00:01:06.020
We're talking about AI agent skills.
00:01:07.160 --> 00:01:10.940
We're going to talk about what they are, why you might want them, why you might not want
00:01:10.980 --> 00:01:15.700
them, when they're valuable, and then maybe also share a few skills that we've personally
00:01:15.800 --> 00:01:19.020
either written or we use frequently that we find value in.
00:01:20.680 --> 00:01:24.200
So I don't know, I feel like I could probably give a poor definition of skills.
00:01:24.520 --> 00:01:33.280
I don't know if Dillon if you want to chime in and give like a sort of a layman's definition of like what what is a skill what makes up a skill and then we maybe go from there.
00:01:36.580 --> 00:01:39.700
Yeah so they're really just like blocks of text.
00:01:40.700 --> 00:01:42.460
It's a really like simple way to think of them.
00:01:42.940 --> 00:01:46.280
You're doing common tasks common asks for an AI agent.
00:01:47.680 --> 00:01:54.780
I think the most useful thing I've used them for is potentially like there's two different ways, right?
00:01:54.940 --> 00:01:59.140
There's ways of like working on a task, using it to like kick off a task.
00:01:59.700 --> 00:02:03.000
Potentially, like you have a very specific workflow you want to follow.
00:02:03.980 --> 00:02:07.620
Or maybe you have a very specific tool that you integrate with or you interact with.
00:02:08.560 --> 00:02:14.400
I've used it in the past with like interacting with Contentful, for instance, which is like a CMS.
00:02:15.480 --> 00:02:28.720
I've basically taught the skill everything it needs to know, or we've collaborated on everything it needs to know about working with Contentful, migrations, publishing content, all of that.
00:02:29.240 --> 00:02:34.260
And so I've offloaded all of that behavior to the skill.
00:02:34.940 --> 00:02:36.720
So now it can handle all of that for me.
00:02:37.360 --> 00:02:50.960
And so just to like expand on that maybe a bit more, like when you say you taught the skill, you like, basically you've dumped all this context about, in your case, Contentful or working with Contentful into a document, right?
00:02:51.080 --> 00:02:56.460
Like you've, you've put it in, maybe you have like some API that you're supposed to use in order to access it.
00:02:56.680 --> 00:03:01.340
Or maybe there's like specific guidelines on what you use Contentful for.
00:03:01.940 --> 00:03:07.480
And you've like dumped all this into maybe a single file, maybe a few files or whatever that make up that skill.
00:03:07.680 --> 00:03:19.180
And then you can basically jump into any sort of agent session, like jump into ChatGPT, jump into Claude Code and into like whatever your favorite sort of agentic tool is of the day.
00:03:19.380 --> 00:03:21.660
And you can say, here, I want to work with Contentful.
00:03:21.670 --> 00:03:23.840
And you tell it, here's your Contentful skill.
00:03:24.360 --> 00:03:26.040
And it carries that context.
00:03:26.540 --> 00:03:26.900
Exactly.
00:03:27.390 --> 00:03:31.300
I don't need to start talking to the agent and say, hey, can you help me with Contentful?
00:03:31.310 --> 00:03:34.720
And it's like, oh, let me go look up the docs and figure out how to do this.
00:03:35.640 --> 00:03:37.540
It just has clear guidelines.
00:03:39.540 --> 00:03:44.280
It can still suggest things, but it's a lot easier to get started.
00:03:45.400 --> 00:03:46.080
Yeah, it makes a lot of sense.
00:03:46.220 --> 00:03:51.060
It's like, um, for, for folks that, uh, yeah, maybe it's not necessarily helpful
00:03:51.240 --> 00:03:54.460
for a lot of our audience, but like, uh, for folks that might know, like the
00:03:54.660 --> 00:03:57.660
concept of like a run book or standard operating procedure, it's kind of like
00:03:57.800 --> 00:03:59.040
that, but for agents, right?
00:03:59.120 --> 00:04:03.240
Like someone maybe at your company or someone somewhere has written down a set
00:04:03.240 --> 00:04:06.320
of guidelines of how to do a certain thing, like a task or a workflow.
00:04:07.060 --> 00:04:10.040
And they share that document and you can read it and then you can follow those
00:04:10.160 --> 00:04:13.220
steps and that's basically the same thing as what skills are for agents.
00:04:13.620 --> 00:04:14.740
Like it's a, yeah.
00:04:15.280 --> 00:04:15.380
Yeah.
00:04:15.880 --> 00:04:18.859
whatever. I, yeah, I think we're probably maybe, or I'm probably over-defining it.
00:04:20.340 --> 00:04:23.680
Scott, I'm curious from your perspective, like what, what are some use cases of like
00:04:23.840 --> 00:04:28.920
when you would reach for using a skill versus maybe just straight up prompting your agent?
00:04:30.360 --> 00:04:33.580
Like, like what, why would I like, like what Dillon was sharing? Like what, why would I
00:04:34.020 --> 00:04:37.940
dump all this context in a document and then use it instead of just telling the agent,
00:04:38.340 --> 00:04:39.240
Hey, do this thing for me.
00:04:39.940 --> 00:04:42.899
It's a good question. I feel like my answer is going to be similar to like one of the
00:04:42.920 --> 00:04:50.420
first things Dillon said which was like repetitive tasks basically um yeah i don't want to get i want
00:04:50.420 --> 00:04:56.320
to get into like how we use skills but i'll save that for now but i i have personal skills of like
00:04:57.620 --> 00:05:04.160
uh pr descriptions it just like writes up the description and i approve it i have um
00:05:05.410 --> 00:05:11.679
like deploy confidence whether or not like like did we check all the boxes i have a skill that's
00:05:11.700 --> 00:05:18.100
UI review that runs the whole, um, suite in Chrome screenshots, the whole thing.
00:05:18.240 --> 00:05:20.520
I get to watch it to make sure the UI looks good.
00:05:21.020 --> 00:05:26.460
Um, I have various other skills like that, but I essentially just use skills when I have
00:05:26.460 --> 00:05:28.980
a repeat task that's going to happen often.
00:05:29.900 --> 00:05:30.220
Yeah.
00:05:30.280 --> 00:05:30.920
That makes a lot of sense.
00:05:31.100 --> 00:05:35.780
I feel like personally I've, yeah, I mean, we'll probably get to it when we start talking
00:05:35.920 --> 00:05:40.100
about some of the skills that we've used, but honestly, there's not that many times where
00:05:40.100 --> 00:05:41.280
I actually reach for a skill.
00:05:41.500 --> 00:05:46.960
Usually it's like the things I'm doing that are repetitive are small enough that I just have them saved in my clipboard manager.
00:05:47.050 --> 00:05:51.480
And I can just pull up my clipboard manager and just say, like, paste this snippet as I'm prompting the agent.
00:05:52.440 --> 00:06:03.660
You know, maybe the most common one for me is like, oh, let's open a PR and like use this standard technical English sort of concept as the PR description, like as you're writing the PR description.
00:06:03.870 --> 00:06:08.020
And that's just a snippet on my like sort of clipboard manager and I can just paste it in.
00:06:08.410 --> 00:06:11.140
Like, obviously I could write a skill for that and just invoke the skill.
00:06:11.580 --> 00:06:15.240
But, um, so I personally, I've found at least in that workflow.
00:06:15.360 --> 00:06:19.800
It's like faster for me to just type it out than it is for me to like save the skill and
00:06:19.800 --> 00:06:22.760
then like load the skill into my session and use it.
00:06:23.100 --> 00:06:27.060
So we have a skills marketplace per repo, uh, at work.
00:06:27.700 --> 00:06:30.940
We also have skills per project.
00:06:31.940 --> 00:06:34.020
So we have multiple tiers of skill layers.
00:06:34.680 --> 00:06:41.160
Uh, something we have is every, uh, test that's written unit and integration is forced
00:06:41.180 --> 00:06:48.740
go through a skill. We also have skills for like storybook stories, basically you name it,
00:06:49.140 --> 00:06:55.840
any repeated task. So if you're building a piece of UI, you can just run skills to output all of
00:06:55.960 --> 00:07:03.680
that. And they're pretty robust skills, like the unit test coverage skills. They're pretty thorough.
00:07:04.180 --> 00:07:09.640
They were slow. They have gotten a bit faster, but we do a lot of things with skills.
00:07:10.620 --> 00:07:23.400
When you say you have like a skill for unit tests and for like stories and things like that, is that, that is like a written down codified standard of telling the agent, like, here's how to write a unit test.
00:07:23.520 --> 00:07:24.560
Here's how to write an end test.
00:07:24.760 --> 00:07:25.500
Here's how to write a story.
00:07:25.620 --> 00:07:34.980
Or is it, and it's like, like, like how, yeah, I guess I'm curious, like what the contents of those skills usually look like, not necessarily to go into details, but just like, what is it?
00:07:35.160 --> 00:07:39.300
Like, why would I want a skill for an agent to talk about unit tests, for example?
00:07:40.180 --> 00:07:47.400
it's worth noting that um if you invoke an agent without using the skill it has like a
00:07:47.880 --> 00:07:53.760
forget the name of the tag but basically there's a tag that invokes it um whenever the the agent
00:07:54.980 --> 00:08:00.880
goes to write a test so you even if you don't use the skill it's forced to be invoked the skill
00:08:01.620 --> 00:08:06.359
has to be invoked every time there's a test written there's a series of guidelines and rules
00:08:06.480 --> 00:08:11.600
and there was a lot of effort put into it by the web platform team to make sure that it's robust
00:08:12.400 --> 00:08:15.240
and that we're writing tests in a standardized way.
00:08:15.630 --> 00:08:19.040
So there is a very clear standardization doc,
00:08:19.090 --> 00:08:27.240
and then that feeds through the agents.md and the CLAUDE.mds to always invoke it whenever a test is prompted.
00:08:28.140 --> 00:08:28.580
Gotcha.
00:08:28.870 --> 00:08:35.539
So unless you write it manually, AI in our repo, in our front-end repo,
00:08:37.419 --> 00:08:43.419
always invokes a skill and it runs a series of uh it checks itself it run it runs a series
00:08:43.669 --> 00:08:46.020
suite of things to make sure that they're like robust tests
00:08:46.020 --> 00:08:51.440
gotcha um cool yeah i guess like
00:08:51.720 --> 00:08:58.480
maybe we should pivot into sharing some skills that we use or or uh or maybe we've written or
00:08:58.780 --> 00:09:02.639
or maybe the ones that we found online or whatever or shared around or whatever that we use
00:09:03.160 --> 00:09:07.640
I don't know Dillon if you want to go first or Scott if you want to continue on or
00:09:07.640 --> 00:09:08.880
I can go
00:09:10.800 --> 00:09:14.860
I kind of bounce around on using them I mean sometimes I feel like I'm using them a lot
00:09:15.050 --> 00:09:22.480
sometimes I just get tired of using them one I've been messing around with lately so and this is
00:09:22.600 --> 00:09:28.119
probably everyone else that's looking at skills is some of like the Matt Pocock skills I'll mess
00:09:28.140 --> 00:09:34.240
around with those sometimes. I don't actually use them that much, but I do like the handoff skill,
00:09:35.300 --> 00:09:39.580
but you don't, I don't even know that you actually need it. I think you can just ask an agent,
00:09:40.220 --> 00:09:45.380
write a handoff doc based on the current chat so I can give this to another agent. This is more of
00:09:45.380 --> 00:09:49.600
the use case of like, I'm in the middle of working on something and then I decide I want to work on
00:09:49.720 --> 00:09:54.879
something else, but it's never good. It's you, maybe you've tried this. It's never good to try
00:09:54.900 --> 00:09:56.700
to tell an agent to do two things at once
00:09:57.440 --> 00:09:59.860
because it just gets everything really screwed up.
00:10:01.620 --> 00:10:04.940
So if you can create a block of summarized context
00:10:05.160 --> 00:10:06.740
to pass to another agent, it's really helpful.
00:10:08.360 --> 00:10:13.420
And then I've kind of stopped using the harness-type skills
00:10:14.560 --> 00:10:16.400
that try to manage an entire dev workflow.
00:10:17.060 --> 00:10:22.200
I find that they're a bit too strict to your process,
00:10:22.720 --> 00:10:23.480
if that makes sense.
00:10:24.880 --> 00:10:31.400
and the only other one I've really been messing around with lately is the ponytail skill which is
00:10:32.200 --> 00:10:39.700
hilarious to say which is just meant to look at everything you're doing and kind of apply the
00:10:40.350 --> 00:10:46.540
the Yagni principle if that's even a principle the the you ain't gonna need it it will basically
00:10:46.720 --> 00:10:52.700
look at your code and try to see if you're doing anything doing anything too complex
00:10:53.180 --> 00:10:57.280
or if it can be simplified and i found that it's pretty good with its recommendations
00:10:59.560 --> 00:11:05.660
um beyond that i was messing around with the trio review skill that i probably took one of
00:11:05.740 --> 00:11:07.260
matt's skills i'll save that for him
00:11:07.260 --> 00:11:11.799
no no actually like i actually wasn't going to cover that but
00:11:11.820 --> 00:11:17.640
that is an interesting uh i guess like maybe we can can jointly cover it so just for context and
00:11:17.720 --> 00:11:23.600
a friend of the pod uh joe boyle shared this the skill with uh myself and and someone else uh
00:11:23.830 --> 00:11:29.120
at HubSpot um i think he shared it with a few people but sort of like a uh code review skill
00:11:29.720 --> 00:11:34.420
that um sort of has the agent take on sort of one of three different or like spins up three
00:11:34.620 --> 00:11:40.179
sub agents and each one takes on a different like sort of personality uh and it provides feedback
00:11:40.200 --> 00:11:41.940
at different levels on your code.
00:11:43.020 --> 00:11:44.440
Yeah, I've only used it a handful of times.
00:11:44.490 --> 00:11:47.260
So I don't know, Dillon, if you've ended up using it more frequently than I,
00:11:47.290 --> 00:11:49.760
then you probably have a better way to describe it and explain it.
00:11:50.660 --> 00:11:56.240
I've used it a couple times, usually on things that I feel like I want to get perfect,
00:11:57.100 --> 00:11:59.960
like critical parts of the software I'm working on,
00:12:00.200 --> 00:12:01.540
just to see if there's anything I'm missing.
00:12:02.600 --> 00:12:08.100
If it's a simpler feature, there's not a lot of reason to have this super in-depth review.
00:12:09.840 --> 00:12:11.280
But I found that it's pretty helpful.
00:12:11.980 --> 00:12:14.580
It makes you consider things from perspectives
00:12:14.730 --> 00:12:15.600
maybe you're not thinking about.
00:12:16.680 --> 00:12:21.300
Yeah, you mentioned the handoff Matt Pocock skill,
00:12:21.710 --> 00:12:22.960
which I think is a good one.
00:12:23.060 --> 00:12:24.340
I had my own version of it.
00:12:24.340 --> 00:12:25.520
I call it MyDocs.
00:12:27.300 --> 00:12:31.380
If I'm knee-deep in conversation with an agent,
00:12:32.110 --> 00:12:35.380
I basically just have a skill that's like,
00:12:35.840 --> 00:12:37.640
hey, can you write up a doc on everything we just said?
00:12:38.240 --> 00:12:40.660
It puts it into like a local my docs folder.
00:12:41.380 --> 00:12:47.140
It categorizes it by like, is it an RFC, a guy to feature, to plan, whatnot.
00:12:48.400 --> 00:12:49.840
It just saves that context somewhere.
00:12:51.800 --> 00:12:55.580
I also use it to like write docs in general.
00:12:56.260 --> 00:12:59.720
I will say like when I have to write like really high level elaborate docs,
00:12:59.980 --> 00:13:03.280
like grill, the grill me or grill with docs.
00:13:04.040 --> 00:13:05.320
He keeps changing the name of it.
00:13:05.960 --> 00:13:08.060
But I think it's grilling with docs now.
00:13:08.140 --> 00:13:12.780
that skill has been really helpful because it just kind of asks me a million questions and
00:13:13.220 --> 00:13:16.020
kind of make sure we stare it in the right direction. I found that really helpful.
00:13:17.560 --> 00:13:23.920
Yeah, I mostly have like a PR review, a deploy confidence. I have a UI review. I have,
00:13:25.380 --> 00:13:32.999
I think we also have like a PR description kind of one in the repo that will like write it. We also
00:13:33.020 --> 00:13:37.240
So like we have one that'll take screenshots of your UI and,
00:13:37.300 --> 00:13:39.820
and post it to the GitHub PR.
00:13:40.660 --> 00:13:42.960
So, so basically all those like ancillary tasks,
00:13:43.040 --> 00:13:45.240
we have a rebase merge one.
00:13:46.760 --> 00:13:51.840
We have said storybook stories, unit tests, integration tests,
00:13:52.520 --> 00:13:53.380
end to end tests.
00:13:53.800 --> 00:13:57.740
We even have like an end to end test platform now that's natural language,
00:13:59.680 --> 00:14:02.020
which is like, it's built on aluminum.
00:14:02.860 --> 00:14:06.560
which is pretty cool, but we're doing more and more stuff.
00:14:07.070 --> 00:14:10.660
I'd say like I still mostly prompt when I write stuff,
00:14:11.000 --> 00:14:13.040
but like there's a lot of little things.
00:14:13.260 --> 00:14:18.320
I recently created a skill for migrating all of our title tags,
00:14:18.390 --> 00:14:22.300
like the HTML head title to be consistent across the repo.
00:14:24.420 --> 00:14:31.060
And we even have like a repo that allows us to basically it's a mic.
00:14:31.280 --> 00:14:39.380
It's called Migration Tools, and we're able to basically migrate in loops using AI with it.
00:14:39.940 --> 00:14:42.700
So you can do a bunch of PRs, spend a bunch of PRs for you.
00:14:43.340 --> 00:14:51.520
So I'll use skills in conjunction with things like that as well for daunting ancillary tasks that we used to do that are like migrations.
00:14:53.400 --> 00:14:58.320
It's interesting hearing, Scott, from your perspective of just how many skills you guys are using.
00:14:58.480 --> 00:15:03.320
I feel like that there was a period at HubSpot maybe a couple months ago,
00:15:03.530 --> 00:15:04.880
maybe a month or two ago,
00:15:04.970 --> 00:15:10.780
where it's like everyone and their coworker were told to basically write skills.
00:15:11.840 --> 00:15:13.440
And we had this huge explosion of skills.
00:15:13.530 --> 00:15:16.120
And I feel like that's fallen off at HubSpot.
00:15:16.240 --> 00:15:19.080
We certainly still have skills and people are still writing skills,
00:15:19.130 --> 00:15:22.900
but it's not become as much of a focus for a lot of people.
00:15:24.340 --> 00:15:27.319
But it's interesting to hear different organizations adopting skills
00:15:27.340 --> 00:15:29.440
at different levels or different sort of depths?
00:15:30.380 --> 00:15:33.040
Yeah, I wouldn't say like I always reach for them.
00:15:33.600 --> 00:15:38.360
Like there are very, we, I think what we're really good at,
00:15:38.640 --> 00:15:40.000
first off, it's a choose your own adventure.
00:15:40.630 --> 00:15:43.780
So like I told you that like the unit and integration test
00:15:43.830 --> 00:15:44.840
like has to run through that.
00:15:44.930 --> 00:15:46.480
I think that that's actually a good thing
00:15:46.840 --> 00:15:48.540
because you're getting consistency out of it.
00:15:50.240 --> 00:15:51.380
And I like it.
00:15:51.410 --> 00:15:52.580
I mean, it's been pretty great.
00:15:54.080 --> 00:15:56.439
But you can still prompt it on like what to write
00:15:56.460 --> 00:15:57.680
if like a test isn't there.
00:15:57.780 --> 00:16:00.900
Like I still use it a lot to do TDD things.
00:16:01.000 --> 00:16:02.200
Be like, oh, is this bug broken?
00:16:02.320 --> 00:16:03.120
Let's write the test first.
00:16:03.700 --> 00:16:05.300
It's a very robust skill.
00:16:06.780 --> 00:16:10.160
But like you don't necessarily need to use all of them.
00:16:10.760 --> 00:16:13.860
It's more of like, yeah, choose your own adventure.
00:16:14.040 --> 00:16:15.400
We give you a lot of options
00:16:15.480 --> 00:16:16.500
to do a lot of different things.
00:16:16.900 --> 00:16:20.780
But I do think we do well the ability to like,
00:16:20.940 --> 00:16:22.940
okay, you're gonna create a component story.
00:16:23.140 --> 00:16:23.860
You're gonna write tests.
00:16:23.920 --> 00:16:26.500
You're going to create a PR here.
00:16:26.660 --> 00:16:28.240
You're going to need screenshots of your UI.
00:16:28.740 --> 00:16:31.980
You're going to need to write some GraphQL.
00:16:32.200 --> 00:16:33.780
We have skills for that.
00:16:33.870 --> 00:16:40.480
So it'll go find the part of GraphQL you just wrote and write it up for you.
00:16:40.660 --> 00:16:44.020
And it does a lot of those tasks that are more mundane.
00:16:45.470 --> 00:16:46.780
And it's really good at that.
00:16:46.920 --> 00:17:01.300
So we do a pretty good job of creating a broad bucket of what might be like a reusable task in a very broad sense and make it a little bit easier on the user.
00:17:02.680 --> 00:17:04.180
Yeah, it's kind of crazy just to hear that, though.
00:17:04.339 --> 00:17:11.760
Like, I feel like the way I operate is like maybe the polar opposite of I basically don't load any skills at all.
00:17:13.560 --> 00:17:15.319
And and like the agent still figures out.
00:17:15.400 --> 00:17:18.380
Like, I think, I think for a lot of things and maybe this like getting more into like
00:17:18.560 --> 00:17:23.360
opinion and hot takes of like, I feel like depending on the model and the harness you're
00:17:23.459 --> 00:17:26.220
using, skills can be extremely useful.
00:17:27.120 --> 00:17:31.340
And, but in other cases, like other sort of combinations of models and harnesses of like,
00:17:31.800 --> 00:17:33.860
sometimes the skill isn't actually all that useful.
00:17:34.060 --> 00:17:39.540
And like the agent can do the work that was sort of maybe pre-programmed into the skill,
00:17:40.240 --> 00:17:43.020
like as efficiently as if it had loaded a skill.
00:17:44.720 --> 00:17:46.700
But yeah, maybe we save that for another episode.
00:17:48.400 --> 00:17:49.780
Yeah, it's not the experience I have.
00:17:51.640 --> 00:17:54.660
These are all like very battle tested and they're very clear.
00:17:55.340 --> 00:17:55.600
But yeah.
00:17:56.760 --> 00:17:58.700
Yeah, I think we have a lot of those internally at HubSpot also,
00:17:58.820 --> 00:18:01.280
but I just like have never found a use case where I actually needed it.
00:18:01.780 --> 00:18:05.620
Like my agent, like GPT 5.6 Terra has been perfect
00:18:05.780 --> 00:18:08.060
at being able to do whatever I need it done.
00:18:09.160 --> 00:18:12.879
And it doesn't have to like go in and load up any skills
00:18:12.900 --> 00:18:14.520
that our org has written up at least.
00:18:16.040 --> 00:18:19.480
Two skills that I was going to bring up and share.
00:18:19.560 --> 00:18:23.100
Like one is, well, yeah, I pretty much rarely use skills.
00:18:23.820 --> 00:18:25.660
The two skills that I have been using,
00:18:26.740 --> 00:18:32.140
I have a sort of a scheduled task in Cloud Code
00:18:33.280 --> 00:18:36.940
that just every week goes through my work calendar
00:18:37.140 --> 00:18:38.680
and like creates meeting notes in Notion
00:18:39.260 --> 00:18:41.060
for each meeting that I have for that following week.
00:18:42.200 --> 00:18:50.560
And so that's just like a simple skill that was programmed to like sort of look up and manage like, oh, like when you see this email that maps this person that I have in Notion.
00:18:50.670 --> 00:18:55.760
So I can like connect the dots between coworkers and what meetings I've been in with them and things like that.
00:18:55.770 --> 00:18:59.120
And then it like sort of spins up all my meeting notes for the week, which is kind of nice.
00:18:59.680 --> 00:19:00.020
That's cool.
00:19:00.500 --> 00:19:03.260
I've like, yeah, I've tinkered with like trying to use a script for that.
00:19:03.540 --> 00:19:10.420
But like using a skill allows for a little bit more flexibility of like what to do when it handles maybe a name that hasn't recognized.
00:19:10.740 --> 00:19:12.500
and it does some searching and whatnot.
00:19:14.030 --> 00:19:14.640
So that's been neat.
00:19:15.900 --> 00:19:19.020
The second one, when we originally sort of scaffolded out
00:19:19.030 --> 00:19:21.900
the notes for this episode, I had written up
00:19:22.070 --> 00:19:26.700
my own sort of anti-slop or slop review skill, which I think
00:19:26.710 --> 00:19:27.740
I've talked about in the past.
00:19:27.790 --> 00:19:30.860
But I have this sort of daily scheduled task in Cloud Code
00:19:32.280 --> 00:19:33.960
that will review my primary code base
00:19:34.050 --> 00:19:37.559
and look for anything that looks like it's slop in the sense
00:19:37.580 --> 00:19:44.500
of like a ton of useless comments or tests that aren't testing anything or that are like,
00:19:44.940 --> 00:19:46.540
like, oh, this function always returns true.
00:19:46.660 --> 00:19:48.740
And it's like, it's testing that the function always returns true.
00:19:48.740 --> 00:19:50.660
And it's like useless tests, things like that.
00:19:51.800 --> 00:19:54.880
So I had hand rolled a skill for that.
00:19:56.260 --> 00:20:01.080
And then recently I discovered this sort of anti-slop project from Dillon Mulroy,
00:20:02.480 --> 00:20:06.820
which is a combination of an Oxlint or a set of Oxlint, like a custom lint plugins.
00:20:07.300 --> 00:20:09.620
as well as like a agent skill.
00:20:11.200 --> 00:20:13.280
And I ran that on my code base the other day.
00:20:13.310 --> 00:20:15.100
I like sort of kicked it off before I went to sleep
00:20:15.230 --> 00:20:17.700
and then came back and I had like a,
00:20:17.970 --> 00:20:22.760
I don't know, like a minus 6,000 plus like 2,000 PR,
00:20:23.180 --> 00:20:25.980
just cleaning up a ton of slop in my code base.
00:20:26.080 --> 00:20:28.240
And so now I get that sort of like
00:20:28.800 --> 00:20:30.220
that stuff for free out of the box now,
00:20:31.180 --> 00:20:31.660
which is pretty neat.
00:20:32.480 --> 00:20:34.460
Yeah, we have a code review skill similarly.
00:20:35.030 --> 00:20:35.740
I got to ask though,
00:20:35.980 --> 00:20:40.780
Like, do you have your AI agent write your PR descriptions and you get a consistent result
00:20:41.100 --> 00:20:41.480
every time?
00:20:42.640 --> 00:20:42.760
Yeah.
00:20:42.940 --> 00:20:44.760
You have to tell it like what to be there.
00:20:46.240 --> 00:20:51.160
I just, I just tell it, um, literally all I tell it is to use, uh, and then I shared
00:20:51.260 --> 00:20:56.880
this like sort of a small blog post about this, but I just tell it use ASD STE 100 simplified
00:20:57.040 --> 00:20:58.760
technical English for the PR description.
00:20:59.140 --> 00:21:00.020
And that's all I have to tell it.
00:21:00.780 --> 00:21:07.400
And it writes like, I think I've seen coworkers that are using Claude to write
00:21:07.420 --> 00:21:11.780
their PR descriptions and it's incredibly verbose and like annoying to read.
00:21:12.360 --> 00:21:16.040
And I feel like mine are, you know, there's still, it's maybe a little bit
00:21:16.220 --> 00:21:22.100
over concise instead of lengthy, which is good, but you can definitely tell
00:21:22.260 --> 00:21:24.860
like an agent wrote it instead of human, but yeah.
00:21:26.660 --> 00:21:26.740
Yeah.
00:21:26.800 --> 00:21:29.639
So, so like that, that was like an example case where it's like, I haven't
00:21:29.660 --> 00:21:32.800
need to use a skill to like tell it to write a PR description.
00:21:33.040 --> 00:21:36.200
I just like copy and paste that from my clipboard just to use that,
00:21:36.460 --> 00:21:40.020
that sort of like that string of texts, the ASD STE 100 thing.
00:21:40.120 --> 00:21:42.900
But I know what ASD STE 100 is, Matt.
00:21:44.799 --> 00:21:47.740
I'll share a link and I'll put a link in our,
00:21:49.700 --> 00:21:51.100
in the episode show notes as well.
00:21:53.160 --> 00:21:59.099
It's like a spec for how to, how to like write a sort of plain and like to
00:21:59.120 --> 00:22:05.660
the sort of to the point uh sort of standard english i guess i don't know keeps things really
00:22:05.720 --> 00:22:06.700
short short and concise
00:22:06.700 --> 00:22:13.220
i'm about to ask my agent right now to rewrite a tech spec that i had
00:22:13.720 --> 00:22:15.220
using that just to see what it does
00:22:18.700 --> 00:22:19.560
and i'll let you know if it's good
00:22:22.980 --> 00:22:27.699
um i also realized while we were talking about this my company does have like a marketplace of
00:22:27.720 --> 00:22:34.540
plugins and a repo where people can go and contribute um and i just haven't been using
00:22:34.610 --> 00:22:41.120
them recently but there are ones for writing prs for instance and it gives it like tells the agent
00:22:41.300 --> 00:22:46.820
hey don't focus so much on the like specific implementation details so some sometimes when
00:22:46.850 --> 00:22:51.900
you ask it to write you a pr description it'll it'll like detail every like implement implementation
00:22:52.260 --> 00:22:57.680
detail but what you're really trying to get across in a pr description is what is what is this pr
00:22:58.260 --> 00:22:59.600
why is it doing it
00:23:00.460 --> 00:23:01.680
and is there any follow up work
00:23:02.900 --> 00:23:03.240
anything
00:23:03.840 --> 00:23:05.180
just like the high level picture
00:23:05.380 --> 00:23:06.840
it doesn't need to be super detailed
00:23:07.520 --> 00:23:09.480
I used tailwind classes
00:23:09.840 --> 00:23:11.640
to move the div to the left
00:23:11.680 --> 00:23:12.300
or some shit
00:23:13.080 --> 00:23:14.540
that's not that helpful to the reviewer
00:23:14.660 --> 00:23:15.700
they can see that in the code
00:23:16.760 --> 00:23:18.620
yeah mine's similar to that
00:23:18.660 --> 00:23:20.500
where it just basically tells it to keep it
00:23:21.360 --> 00:23:21.840
simple
00:23:22.180 --> 00:23:24.280
it does sometimes get a little longer
00:23:24.540 --> 00:23:25.440
but for the most part
00:23:26.180 --> 00:23:27.660
it's pretty good
00:23:28.440 --> 00:23:40.660
Yeah. And then there's something else that kind of goes beyond skills that my company is starting to experiment with. I haven't even tried it, but it's more of like an automated harness process.
00:23:41.340 --> 00:23:45.240
and I think that kind of ties in closely to what Scott was saying
00:23:45.600 --> 00:23:48.220
around having a loop that runs on a repetitive task
00:23:48.290 --> 00:23:49.600
and does a migration.
00:23:50.370 --> 00:23:51.960
And I think they're using it currently.
00:23:51.990 --> 00:23:54.400
They have a workflow for cleaning up feature flags
00:23:54.640 --> 00:23:57.840
across multiple repositories all in one go.
00:23:58.840 --> 00:24:00.260
And so you'll give it a workflow.
00:24:01.100 --> 00:24:04.860
It's like, activate this workflow of cleanup feature flag of this key,
00:24:04.950 --> 00:24:07.320
and then it will go scan all the repos,
00:24:07.680 --> 00:24:08.660
figure out how to clean it up,
00:24:09.280 --> 00:24:13.820
spin up tickets, then execute on those tickets, create up PRs,
00:24:13.870 --> 00:24:16.940
and then you just do a human review of the PRs and OK it.
00:24:17.100 --> 00:24:21.640
As long as you approve it, then that OKs the next part of the workflow
00:24:21.750 --> 00:24:23.960
and then it continues on without you.
00:24:24.990 --> 00:24:26.180
So that part of it is kind of interesting.
00:24:28.100 --> 00:24:30.020
Matt, did you fix your technical difficulties?
00:24:31.280 --> 00:24:34.160
Yeah, my headphones were sort of faltering and diconnecting.
00:24:35.960 --> 00:24:39.200
Just on your last note there, we have something called Mothership at HubSpot.
00:24:39.260 --> 00:24:41.300
previously it let you do
00:24:41.860 --> 00:24:43.280
scripted tasks across
00:24:43.680 --> 00:24:45.300
a suite of repos because
00:24:45.440 --> 00:24:47.220
we're maybe infamously
00:24:47.920 --> 00:24:48.860
not a monorepo
00:24:49.440 --> 00:24:51.220
company. We have thousands and thousands
00:24:51.240 --> 00:24:51.740
of repos.
00:24:53.320 --> 00:24:55.300
This would let you do scripted tasks
00:24:55.500 --> 00:24:57.440
like running code mods across the entire
00:24:57.540 --> 00:24:59.160
fleet of repos, for example.
00:24:59.620 --> 00:25:01.440
Recently they rolled out this thing called agentic missions
00:25:02.020 --> 00:25:03.380
which is just like run
00:25:03.380 --> 00:25:05.020
an agent and have the agent
00:25:05.360 --> 00:25:07.660
run a prompt against these thousands of repos
00:25:08.920 --> 00:25:10.220
which is an interesting use case.
00:25:10.360 --> 00:25:14.520
It may be like we should have an episode on sort of using agents to make
00:25:14.520 --> 00:25:17.340
co-changes versus like using deterministic scripts or mods.
00:25:18.180 --> 00:25:23.560
Cause I think there's sort of like a, a scale of which like sort of when,
00:25:23.690 --> 00:25:26.420
when you, when it makes the right sense to do that one thing versus the other.
00:25:27.740 --> 00:25:27.900
Yeah.
00:25:30.220 --> 00:25:31.880
Should we, should we wrap it there?
00:25:31.930 --> 00:25:34.520
Do we want to, do we have any other further thoughts on, on skills?
00:25:34.630 --> 00:25:36.720
I feel like we could probably do a follow-up episode on skills,
00:25:36.920 --> 00:25:40.700
but any further thoughts that people want to flag or share?
00:25:41.640 --> 00:25:44.520
There's two other that I used to use pretty frequently
00:25:44.860 --> 00:25:46.040
and I want to start using again.
00:25:46.140 --> 00:25:48.280
I've just gotten so, I was so busy on a project
00:25:48.400 --> 00:25:51.520
that I was just so focused on executing and getting it done.
00:25:52.780 --> 00:25:56.180
But there's, it's, I had two that I've talked about in the past
00:25:56.400 --> 00:26:00.980
called EOD and SOD, which is not that crazy.
00:26:01.120 --> 00:26:02.600
It's just end of day and start of day.
00:26:03.260 --> 00:26:05.760
It's just a place to like mind dump everything I've done.
00:26:07.120 --> 00:26:09.980
at the end of the day and then in the start of the day I can just
00:26:10.900 --> 00:26:14.020
call the SOD skill and it will recap everything I told it.
00:26:14.850 --> 00:26:17.700
It also will go to GitHub and different
00:26:18.020 --> 00:26:21.420
and Jira and connect the dots for me, which is nice.
00:26:22.460 --> 00:26:26.240
And then I can jump back into a review if I said I needed to review some code.
00:26:27.260 --> 00:26:28.220
But it's a nice way to
00:26:30.600 --> 00:26:34.220
ease me into my day and also provide me almost like a stand-up update.
00:26:35.940 --> 00:26:36.260
nice
00:26:38.440 --> 00:26:38.760
cool
00:26:39.360 --> 00:26:39.460
alright
00:26:40.560 --> 00:26:40.660
yeah
00:26:40.920 --> 00:26:41.240
thanks everyone
00:26:41.300 --> 00:26:41.780
for tuning in
00:26:41.880 --> 00:26:42.120
this week
00:26:42.340 --> 00:26:42.820
remember to leave
00:26:42.920 --> 00:26:43.280
a review of the
00:26:43.420 --> 00:26:43.960
episode and your
00:26:44.060 --> 00:26:44.360
show and your
00:26:44.440 --> 00:26:44.780
favorite podcast
00:26:44.980 --> 00:26:45.100
network
00:26:45.280 --> 00:26:45.620
we appreciate
00:26:45.800 --> 00:26:46.340
well formatted
00:26:46.460 --> 00:26:46.920
markdown over
00:26:47.040 --> 00:26:47.760
deterministic rules
00:26:47.860 --> 00:26:48.240
the most
00:26:49.060 --> 00:26:49.680
remember if the
00:26:49.700 --> 00:26:50.180
app doesn't let
00:26:50.180 --> 00:26:50.640
you then it's a
00:26:50.720 --> 00:26:51.200
bug on their end
00:26:51.220 --> 00:26:51.840
and not on ours
00:26:52.240 --> 00:26:52.920
feel free to join
00:26:52.940 --> 00:26:53.320
the bike check
00:26:53.500 --> 00:26:53.940
community discord
00:26:54.120 --> 00:26:54.680
server to connect
00:26:54.800 --> 00:26:55.960
with other folks
00:26:56.020 --> 00:26:56.320
in the tech
00:26:56.420 --> 00:26:57.080
ecosystem and share
00:26:57.100 --> 00:26:57.540
your thoughts with
00:26:57.640 --> 00:26:57.980
us and other
00:26:58.180 --> 00:26:58.340
listeners
00:26:58.900 --> 00:26:59.280
you can find a
00:26:59.300 --> 00:26:59.620
link to the
00:26:59.740 --> 00:27:00.120
server as well
00:27:00.220 --> 00:27:00.480
as of our
00:27:00.680 --> 00:27:00.780
episodes
00:27:01.260 --> 00:27:01.580
transcripts
00:27:01.660 --> 00:27:02.160
episode summaries
00:27:03.960 --> 00:27:04.280
miscellaneous
00:27:04.300 --> 00:27:05.560
bikeshedpod.com.
00:27:05.700 --> 00:27:07.560
That's bikeshedpod.com, all one word.
00:27:08.240 --> 00:27:09.500
If you enjoyed this episode or other episodes,
00:27:09.520 --> 00:27:11.560
please share it with your friends or your agents
00:27:11.960 --> 00:27:13.140
or write up a skill about it.
00:27:13.960 --> 00:27:14.700
We'd love to hear that.
00:27:15.500 --> 00:27:17.320
Otherwise, see you maybe next week.
00:27:17.780 --> 00:27:18.020
Peace out.
00:27:19.660 --> 00:27:19.900
Peace.
00:27:21.580 --> 00:27:21.680
Later.