back to indexAI in Action Sep 26: Eliminating Agent-Generated Slop with Mise-en-Place & Trunk

Chapters
0:0 Introduction to AI in Action and community sharing
0:32 Discussion on auto-caching by model providers (OpenAI, Anthropic, Gemini) and its impact on token costs
0:47 Introduction to long-horizon agents and their use in generating documentation
0:54 Discussion on code quality checks, linters, formatters, and GitHub actions
1:10 The goal of uniform LSP feedback and consistent formatters across a codebase
1:32 Overview of Trunk and Mison as primary tools for enforcing uniformity
1:54 Deep dive into Mison: managing dev tools, environments, and tasks
2:22 Integrating Mison with Trunk for consistent code quality and environment wrapping
2:47 The concept of a "ticket-to-repo compiler" and custom linter rules for features
3:0 Strategies for managing AI agent-generated code and preventing "slop"
3:15 Leveraging Trunk and Mison for consistent CI/CD and ephemeral environments
3:30 Onboarding new team members with a standardized mis command set
3:55 Benefits of a uniform toolchain for experimentation and collaboration
4:6 Addressing potential frustrations with automated code audits
4:19 Using CI output to inform agents and automate issue creation
4:29 The challenge of managing "slop" from multiple AI agents
4:40 Hot-swapping agent configurations for collaborative development
4:54 The importance of ephemeral environments for experimentation without ruining local configs
5:14 Final thoughts and community plugs
00:00:00.000 |
it's not today maybe it's next week but that you have been working on that you think would 00:00:04.000 |
be interesting to this group that you want to bring forward or if you're not sure maybe unmute 00:00:08.640 |
and just say like hey i've been working on something in this space is there something 00:00:12.320 |
interesting there to anyone well you know what i could do 00:00:26.320 |
um hey i have um more of a question and maybe i can throw my hand up for it next week 00:00:36.720 |
if it's of interest um did anybody listen to the uh the lance martin podcast with swix 00:00:45.440 |
i haven't yet elaborate what was cool was about it yeah i'm just i mean i'm really interested they 00:00:54.640 |
kind of they covered a lot of stuff in there but one of the things that they they talked about 00:01:00.640 |
briefly was caching and so i've built an application for myself it's like a a knowledge management system 00:01:09.040 |
just something very basic kind of replaces no rome or obsidian or notion and i i migrated everything over 00:01:18.320 |
to sql lite so that when people download the application it kind of seeds an sql lite database 00:01:24.400 |
as the back end of the knowledge management system but i've been trying to i'm i'm a pretty 00:01:30.240 |
entry-level engineer so i've been trying to custom build caching into the system so that somebody's 00:01:38.880 |
interacting with the chat agent um it caches any of the their nodes for example if they're asking 00:01:48.000 |
questions about a podcast that they've imported into the system it'll cache any of the relevant chunks 00:01:54.320 |
but i didn't realize until lance and swix spoke that the model providers have been 00:02:00.880 |
auto caching and is anybody familiar with that 00:02:04.800 |
uh what do you mean by yeah oh i was going to say my understanding is this is related to 00:02:13.360 |
so i haven't listened to the podcast so straight up but i know this is an area of active sort of 00:02:18.240 |
investigation started with um starting with the sort of uh anthropic apis gave us tools for caching on 00:02:26.480 |
their side but didn't to my understanding were not auto caching and then my sense is the reason if i 00:02:33.600 |
understood correctly that uh openai built the responses api was to enable auto caching and so 00:02:39.920 |
correct i don't know if that was the subject of the podcast in this particular case or what but that's 00:02:45.600 |
my guess is they're trying to figure that out because that is a huge benefit yeah so it turns out like 00:02:52.720 |
this is from my surface level research so if you're interacting with an llm or you're using 00:02:56.880 |
sorry you're using the api um the new responses api it does auto cache but it only saves you 50 percent 00:03:05.920 |
um anthropic only caches if you specify in the header and then gemini have a different caching system 00:03:18.240 |
but it's it's massive like if in my the application that i built um the caching is like a 10 10 nearly 10x 00:03:29.040 |
price reduction in tokens um so it's it's massive and then it's also quite like um what they actually 00:03:40.720 |
catch to cache is quite sporadic so i i just i i'm interested if anybody else has 00:03:47.200 |
tried to build that into a system or if they've played around with it if not it's probably worth 00:03:51.840 |
somebody i'm happy to try to do it this week to spin up a notebook just to see what's actually 00:03:57.440 |
happening with the providers now and the new models and the yeah i think that that would be fascinating 00:04:04.560 |
so can i sign you up for next week um what's your what's your discord handle just to make sure 00:04:11.520 |
let me double check i think i'll check and i'll drop it in the chat perfect thank you brad appreciate 00:04:24.640 |
it yikes are you you set figure out a thing to go i'm not set set but i will i guess share something i 00:04:32.160 |
do i do i've been doing a um a little uh over in my server we've been doing a little um 00:04:37.520 |
uh uh uh uh thing uh uh that's very similar to ai in action on wednesdays um and last week 00:04:48.480 |
uh i just had a friend come through who's working on a new like kind of cloud code ish um but it's for 00:04:55.040 |
like long horizon stuff so i just told it like hey can you look through the repo and the github and 00:05:00.960 |
all that stuff and then give me a markdown document of what cicd is like uh here and then um i will i'm 00:05:10.720 |
gonna move that document over uh and then put it in my in my little demo thing here so give me like two 00:05:17.200 |
seconds let me move that over and then i can do that but um the long horizon agent i guess i'll leave a 00:05:22.320 |
link to uh which is at random labs dot ai um let's see sweet okay cool uh let me back up there back up 00:05:46.880 |
box so you set up and then we're gonna take that to where did this go okay this is gonna go 00:06:13.760 |
uh let's see um so yeah i guess like a decent prompt starting point for uh like a discussion of sorts 00:06:34.880 |
could be um in terms of like code quality checks like automated kind of pipeline level stuff um to help 00:06:43.440 |
keep your agents and your team all on the same reels what do you guys what do you guys use if anything 00:06:52.640 |
like linters formatters github actions you find useful etc etc 00:07:09.200 |
so a thing that we've been we've been sort of using very limited amounts of formatters but one 00:07:17.280 |
of the things we've been talking about doing is doing much more extensive uh linting on our side so 00:07:23.120 |
using uh like biome on the typescript side i think is one of the things manuel was digging into and 00:07:29.040 |
um you know the the go ci lint approach just creating useful lints to enforce our guidelines for the lm to 00:07:38.560 |
use exactly uh what about anybody else do you guys like use anything that like helps keep your team in 00:07:46.080 |
sync that's that is the goal of everything i've put together on this repo which i will go over um but i'm 00:07:51.920 |
i'm curious if if or does anybody else do use something to try and like um uh make a uniform 00:08:01.360 |
surface for uh the uh for the rest for like so the team will be on the same page about these things kind of 00:08:17.120 |
or do we just like yolo all our own unique tool chains and there is no at all 00:08:24.080 |
yolo at all um i mean i think there's formatting stuff there's also just like we push much more towards 00:08:32.320 |
typing now so type checks of different sorts i don't know if that's uh a part of this but like making sure 00:08:39.280 |
that you know for example we have a bunch of code that's still in ruby and the stuff that we're 00:08:43.520 |
actively developing with the lm we've added sorbet it's a pain in the ass i don't like it it's not a 00:08:48.320 |
great uh type check system like ghost types are much better and they're built in but like if there 00:08:55.120 |
are places where you have that optional making you know we use typescript instead of javascript things 00:08:59.200 |
like that i think that's also very important for providing those sort of feedback loops to lm code gen 00:09:07.840 |
absolutely no i uh yeah i um i probably should more go towards types but i kind of want uh uh 00:09:15.840 |
the at least for my goal so like one of the things a way that i i think in the id in the ideal world 00:09:24.720 |
um especially if we're all like driving agents and they're all pushing to the same 00:09:29.120 |
um like ideally all of those prs that are good would like to get filtered for goodness and end up in 00:09:36.640 |
maine eventually um and typing is part of that in my opinion but um what would be really or what what 00:09:45.600 |
seems really cool to me would be if um in terms of the the uh like if all of if every formatter that 00:09:58.080 |
was used on this code base was always the same formatter no matter who was using it um and if 00:10:04.320 |
everybody that was getting feedback from their lsp was getting repo specific team uniform lsp feedback 00:10:12.240 |
that kind of thing and so typing is part of that i.e if there is an lsp yelling at you because you're 00:10:19.920 |
using the wrong type both you and me will get the identical message at the identical line that is uh 00:10:26.720 |
showing the the identical error um and and uh code convention so to that end i have a setup that relies 00:10:35.120 |
primarily on two tools that i'm setting up in the team repo and then my plan for like this next uh 00:10:41.600 |
week or so while we're onboarding the new person is to kind of um uh like uh uh 00:10:48.720 |
sit next to them in spirit uh and see if this is uh something that works or something that doesn't 00:10:58.000 |
because the thing that i want to do is i want to kind of enforce this sort of uniform uniformity across 00:11:04.240 |
conventions but i don't know if anybody's works in a repo with like really extensive and tight ci cd 00:11:12.000 |
checks and it's kind of annoying uh because like you'll try to push something or whatever um but uh 00:11:20.160 |
you will not uh you will not end up with uh like you'll try to push something and it'll reject and 00:11:28.000 |
then you have all these like errors that you don't recognize they like try and look at uh and it's super 00:11:31.840 |
annoying um so let me uh see if i can go here and we can go up and we can go up and we'll run slates 00:11:41.360 |
can you read ci cd setup uh and get this repo configured with the same kind of pipeline 00:11:53.840 |
let's do we're gonna do actually i need to change modes real quick um this i'm still experimenting 00:12:02.160 |
with this i don't know if or how much i like it better than quad code or anything but uh the my 00:12:09.840 |
friend who built it i know is really good at doing um code search uh among other things and so uh he was 00:12:20.880 |
like yes this is this is a cli agent but it's specifically for like long horizon tasks with 00:12:26.000 |
like a general yellow prompt so it's just going to like keep working until it figures this out or it 00:12:30.720 |
needs to call me and it gets because it's confused um so while that thing works we can go through the 00:12:37.040 |
document that it is going through um and so the two things that i'm primarily relying on to do this are 00:12:43.040 |
trunk uh which is a trunk.io and then mise en place which is at mise.jdx.dev has anybody heard of 00:12:50.320 |
either of those two tools wait i just got a little bit lost why don't we jump over to this different 00:12:58.080 |
coding agent what's the what are we using here on the left oh yeah the so the this coding agent uh i 00:13:04.320 |
just um this repo is uh is not set up with this pipeline because i have that pipeline set up on the 00:13:13.520 |
on the on the company repo so i can't like go through that in detail so i had this guy hey can 00:13:19.840 |
you pull the cicd from the company repo and then i dropped that into a doc in this repo and i said hey 00:13:26.000 |
look at this doc and then set this repo up like the other one um just to so we have actual actual code 00:13:33.280 |
rather than me like just yapping about what we're doing um so if it can figure that out which it might 00:13:40.800 |
it might not we'll see um in the meantime we can go through what it's going through which is 00:13:46.320 |
configuring this repo in this way which is not currently configured in this way um so uh if we don't have 00:13:54.720 |
trunk or me's users in chat uh the quick uh do they have like a quick pitch on what this is yeah in 00:14:02.400 |
front of it okay so yeah so me's handles three things primarily dev tools environments and tasks so if we 00:14:09.360 |
um or yeah i guess i should stop before i get get too going to going too far um uh is there uh did you 00:14:20.720 |
guys want me to tell you anything more about this repo or about this agent let's see uh okay ensure 00:14:28.800 |
pre-committed uh let's see what i'll configure uh let's see if i need still often 00:14:39.760 |
um sounds like a no just another cli cli agent but i encourage you to go 00:14:50.320 |
uh check it out since then i left a link in chat um so what it's going to do is it's going to set up 00:14:55.680 |
my configuration for meson plus and what that's going to do is give us a an advantage where an 00:15:02.320 |
environment manager or a tool chain manager that is like nvm or rvm or uv or pyenv or whatever you 00:15:10.000 |
use for python um i don't know if there's one for go is there one for go i'm not a go person um but uh 00:15:17.840 |
yeah if you've used asdf before um it this is a lot like that in fact it uses the same backend um and 00:15:24.320 |
what asdf and me's try to do is they're like you don't need nvm or rvm or pyenv or any of that stuff 00:15:30.640 |
like we will do your dev tool version management we do it for all the dev tools and you can configure the 00:15:36.000 |
backend however you like um these will also handle environments so um if i want node my command is 00:15:44.960 |
going to be me's used node at latest and if i want an environment variable my command is going to be me's 00:15:50.800 |
and variable name change and then tasks uh it is also a task runner um so if i want to run test scripts 00:15:59.280 |
it's going to be me's run tests um the and having that it seemed to me that having all of those 00:16:06.720 |
configured identically um across the team would be very helpful especially if part of the team is agents 00:16:13.120 |
um because i don't want um i don't want a bunch of agent code that has your formatters um pushing up to 00:16:22.480 |
the repo um at like agent velocity um and then i'm have a different config tool chain set up um and i'm 00:16:34.400 |
also pushing at that velocity because cicd is going to be a nightmare and nobody's going to want to look 00:16:38.560 |
at those brs um so dev tools environments tasks all going to be the same and then trunk is sort of the 00:16:46.240 |
addition here uh which i primarily am using code quality uh so this is the is like a meta linter so 00:16:55.760 |
your linters and your formatters and your error message uh indicators um are defined in your um in 00:17:04.240 |
your dot trunk uh let's see let me make sure trunk.yam let me see do i need to 00:17:10.880 |
use this back up here um oh yeah okay i'll probably have 00:17:25.760 |
let's see created trunk dot trunk trunk.yaml oh is it h maybe okay so i don't have 00:17:37.200 |
okay so it's still working on actually setting that up um 00:17:44.400 |
but uh okay so let's see trunk why metal linters uh 00:17:53.360 |
the um yeah so we don't want to the idea is like i want you to be able to go into this repo and know 00:18:00.960 |
nothing about it and then uh the i want your prs that are coming in with uh that are at the same level 00:18:09.360 |
of general code quality as mine who's been working on it for a couple months or whatever um so uh in order 00:18:16.800 |
to do that let me see let me see if this will actually just work here let's still let me grab another terminal 00:18:39.280 |
let's double check i think it's because it's also working on the okay uh let's do trunk check 00:18:54.880 |
trunk upgrade we'll get all of our link lynchers on the same 00:19:11.120 |
oh he didn't fix it rip sad times we need to fix that 00:19:26.640 |
linter kind of thing here and then this so this will mean everybody who's in this repo will always use 00:19:33.520 |
this um my main concern when i was like looking into implementing this was because was i want you 00:19:40.000 |
to i want you to i want to have some level of uniformity enforced but i don't want to be annoying 00:19:47.440 |
and i don't want you to prevent you from using the tool chain that you like um so if i do just trunk 00:19:54.080 |
with that it can be kind of um uh uh it can get in the way because you might have something in your 00:20:05.200 |
local tool chain that you like to use but for the requirements to get these linters up and running trunk 00:20:12.720 |
might like insist on a different version of something was kind of my concern so i was like okay 00:20:18.480 |
well if i'm using trunk then if i use that in combination with mise en place one of the things 00:20:26.160 |
that means will do um let me see if there's like a configuration environments yeah um so one of the 00:20:34.800 |
things we'll do is it means we'll do is it will if you want to use like normal stuff like european pm or 00:20:42.480 |
or um uh you know your your whatever ruby version you're like or whatever you can 00:20:48.560 |
um but what this repo will have in it is it will have like an environment that when you're in this 00:20:53.920 |
directory it'll wrap over your environment and it'll give you the um uh like all of these linters etc that 00:21:03.760 |
are in this configuration and then it will give you uh like a vend that has all of the dev tools uh scripts 00:21:15.120 |
and uh um uh uh uh uh the the other thing that does i keep forgetting uh dev tools environments 00:21:23.120 |
and tasks uh and so you can use your tool chain if you want but this repo comes with a cool tool chain 00:21:31.840 |
comes with a formatter comes with linters etc um and when you're in here those are always available 00:21:40.160 |
to you and then uh let me see if there is a let me see if our friend here still working okay cool uh 00:21:49.680 |
setting up kit hub hooks works for me um let me pull this a little bit so i can see okay uh let's see uh 00:22:02.160 |
i wonder if i can i do me's install yet we have a me's trauma we do okay so this is a config file um i i use 00:22:11.280 |
me's on my local this is like my tool chain manager so this works for me um and like so in this repo uh 00:22:19.280 |
what it's going to do is it's going to make sure the environment has um uh uh pnpm at the latest version 00:22:26.960 |
um the and then the other kind of uh reason i like this combination of things is that so we have the we have 00:22:37.920 |
the the the venv that is wrapping your tool chain right and you can use that if you want but if you 00:22:42.640 |
have your own tools like you don't you don't have to but when um when you are pushing a pr back up to 00:22:50.960 |
main uh trunk is going to like if your toolchain config uh has resulted in the formatting of your code 00:23:00.800 |
um that is not the same formatting as everyone else it'll either try to it'll try to fix that for you 00:23:08.160 |
or it'll say like hey you can't push this unless this is the same as everyone else which is 00:23:12.720 |
uh probably something we're gonna have to dial in because i don't want that to that to get super 00:23:17.120 |
annoying but the advantage that you get out of that is um two things one of the things that trunk does 00:23:23.600 |
is it'll run all these can we i wish i mean i don't want to like introduce some errors check 00:23:31.200 |
and just do it fix maybe i'll just throw an agent and yeah there we go there we go so 00:23:37.120 |
this is an auto fixes it's just for the md file right but yeah let's go and apply that formatting so 00:23:53.760 |
okay and then i'll get like a little report that is in a nice format it's all pretty colors or whatever 00:24:05.200 |
and then i can use so i can do something like trump check fix auto fix everything i'll get a nice little 00:24:10.640 |
report of like any warnings or whatever i'll dump that to an md file throw it at claude and be like 00:24:15.120 |
hey this is what's wrong like are you expecting these to be wrong why is this adhering to your 00:24:19.520 |
spec etc etc um so with that you can kind of get into a loop where you can mostly trust that the that 00:24:29.280 |
everybody's agents if they're pushing slop to the repo it's all going to be the same kind of slop and 00:24:34.720 |
that's going to be an indication that you need to change your repo rails and not that like you need 00:24:39.680 |
to try and wrangle an agent by saying more like non-deterministic human words at it um so the um 00:24:47.920 |
uh yeah so between trunk and me's uh on the the nice thing is that this works on any machine so it'll also 00:24:58.080 |
work on any of the ci cd machines um to where i am running the tests etc um let me check uh take a look 00:25:07.840 |
at chat here real quick um because so like me's will wrap that environment right and then uh let me see 00:25:17.360 |
if i can have him okay cool excellent blueprint okay can you put that in place then can you update 00:25:25.920 |
the readme say that me is is our tool chain and tasks and and manager we only use me's commands for 00:25:38.400 |
everything and then also make that true um so uh uh yeah so like between the two of these these sort of 00:25:53.360 |
like enviro uniform environments uh uh uh uh the uniform environments um will also wrap any of the stuff 00:26:02.960 |
that we're building on uh during cicd to do like checks to main or whatever um and the other one 00:26:10.480 |
of the other things that trunk will do nicely which i will we'll check it out let's do another trunk check 00:26:16.320 |
and see and you will hopefully notice that it didn't go back and do and hit this again right so if it is 00:26:26.960 |
already um that will happen if it's fixed but also if i chose no and chose not to fix it it won't it it 00:26:34.080 |
it will cache its results and only like modify things that you've actually changed um so between the end 00:26:41.360 |
wrapper and the like uh uniform uh uh uh code quality enforcement um what you end up with and then like also the 00:26:50.400 |
the caching um if you set up your cicd to also cache as much as it can which you can also use trunk and 00:26:58.400 |
me's to kind of help you do that um then uh like the only kind of command i ever need to teach anyone to 00:27:06.640 |
use this repo it starts with me's and there are three verbs me's use me's end and me's run and that's all 00:27:14.240 |
you ever use in this result um if you want to you can do something else that will that is like one of 00:27:20.400 |
the scripts that me's is running which is like a you know a tsc or something like that or like a pnpm 00:27:27.360 |
build whatever um but uh if you would like to opt in to our uniform uh uh uh uh conformity scheme here 00:27:36.720 |
which eventually you will want to because it'll get kind of annoying if you are using your own tools and 00:27:42.400 |
it's just reformatting every single time i is my hunch um but the uh uh but yeah so between those 00:27:52.560 |
two things the goal is to be able to always run all of the same commands have everything that agents are 00:27:58.880 |
making be formatted in the same way cache everything you possibly can so you only need to rebuild things 00:28:04.240 |
that have actually changed and then um uh then the other i guess like the the the the other bit of 00:28:13.840 |
this is kind of like a personal workflow i think actually manuel you made a really good post on uh 00:28:19.520 |
x.com the everything app uh this morning about uh uh uh the the the ticket to ticket to repo compiler 00:28:29.920 |
um you wanna you wanna give us your your theory on what on what that is yeah i just gave like a recap 00:28:35.600 |
like the same talk i gave pretty much a year ago on asts and dsls and like i was pointing out that 00:28:41.200 |
basically these techniques are nothing new uh in terms of um you know like uh in terms of software 00:28:49.040 |
engineering but because they're so cheap now you can kind of like instead of doing it was like a little 00:28:54.400 |
quip instead of doing like just in time compilation you can do like justin ticket compilers uh so that 00:29:01.680 |
you have like basically if you're working on a certain feature you could create linter rules 00:29:06.000 |
for just that feature and then just delete them once you're done right so that you have like a custom 00:29:10.640 |
prompt that's really just for the task at hand and then once the task is done you just delete them 00:29:16.240 |
which kind of would have been unheard of before so that was my little my little jet compiler 00:29:24.400 |
yeah the um the uh at least like where i i guess i'm trying to make a uh uh jit or no jit the thing 00:29:34.160 |
that i want is i want ticket to repo compilers so what i the way that i'm setting things up is this is 00:29:39.680 |
just like an uh open issue this is one of uh like this will have the context then this will be uh how 00:29:47.920 |
we add a feature and then here's our our acceptance criteria and then um all our cicd and our tool chain 00:29:56.240 |
will adhere to that because the way that i'm deriving that i wonder if i have this i actually this is this 00:30:04.480 |
repo is something that slate built entirely by itself so i'm not sure if it has a spec yeah it looks like it 00:30:08.960 |
didn't use my usual workflow um but the uh normally um i use a kind of uh uh i use a kind of like spec to 00:30:18.720 |
um uh uh spec to code kind of flow um and i build my cicd around that so the the yeah i was like i wish i 00:30:33.440 |
my rebel yeah that's actually kind of what motivated me to do this because we so we have we have 00:30:38.880 |
my repo which is just like one component of our services architecture um and uh i do a lot of like 00:30:48.640 |
thinking and strategizing about how i can get agents to to dump code into the repo whereas uh al is the 00:30:56.080 |
counterpart of i want to drive as many agents as possible to dump as much code into this repo as 00:31:01.680 |
possible as quickly as possible and make sure it works because we need to get this thing shipped um so the 00:31:06.960 |
hopefully this will coalesce into the rails that i have built um not tolerating any of the 00:31:14.800 |
potential slot that might be over there so as we um so like if we need to just get something out right now 00:31:21.840 |
we can yolo it out over there and just bash clawed into it until it works but if it's gonna uh end up 00:31:28.160 |
getting merged into uh like the the counterpart repo which hopefully at some point will be able to kind 00:31:35.760 |
of take over as the prod repo and the rails that are built on it will be such that you can throw as 00:31:41.520 |
much slop at it as you want and all the slop will go away when you try to pr it in um is kind of the the 00:31:48.320 |
eventual goal uh behind this and the the primary tools behind this where our our mees and trunk 00:31:55.360 |
uh because the thing the the sort of thing that i'm trying to do is set up those those rails or buckets 00:32:00.960 |
in such a way um that will um result in enforcing that without being annoying is kind of the goal here 00:32:10.480 |
um so yeah i guess i'll i'll pause my my yammering if there's any questions or anything 00:32:16.800 |
anybody wants to like see or try or i don't know any thoughts comments questions concerns 00:32:40.000 |
yeah so as you this is kind of this is the thing that i want for anybody that's like 00:32:49.440 |
joining the coming on and trying to onboard it's like hey everything starts with me's run nothing 00:32:56.880 |
doesn't start with me's run if you add something it'll convert over into a me's kind of format um and 00:33:04.000 |
then uh the other nice thing about that is like if you're trying or i have a tendency to like play with 00:33:10.560 |
all of the cool new toys and if i find a cool new toy that's like very much working for me it's really 00:33:17.280 |
easy for you to try it because you already have me's but only when you're in this directory so you need you 00:33:22.400 |
only the like um how you so you actually don't i need to fix that part because you actually don't need to 00:33:28.800 |
install trunk because i just package i stick the binary in version control so you just have trunk 00:33:33.600 |
to start so the only thing you need to do is run one script to install me's and it won't um it won't 00:33:41.120 |
mess up the rest of your computer to just have it installed you can start using it if you want i'm a big 00:33:45.680 |
fan but um but you will you'll you'll run that one install and then you'll go you'll do a trunk in 00:33:52.560 |
it and then you'll go on me's install and then you will have uh only in this directory you'll have 00:33:58.880 |
the same environment as everybody else and if we all kind of if we're testing out tools then i can a 00:34:04.320 |
like test them ephemerally by just like uh uh adding to uh me's.toml for myself and then um uh enforcing 00:34:15.600 |
enforcing uh approvals on changes to the repo me's.toml and then as we all kind of experiment 00:34:21.680 |
with the tool chain that's working for us we can sort of get on the same page of like okay like let's 00:34:26.080 |
add that tool to this repo so all of the agents and all the rest of the team had you can like try it out 00:34:31.600 |
and then if it's annoying you just uh um you can uh uh my it's occurring to me that my enthusiasm for new 00:34:39.680 |
dev tools is perhaps uh a bit um uh over enthusiastic because i don't remember off the top of my head how 00:34:46.560 |
to uh get rid of a tool that i've added to me is but i presume that there is a a command for that in 00:34:53.440 |
here somewhere if you experiment with something and like either you don't like it or somebody else on 00:34:58.960 |
the team does like it etc etc um but yeah i'm i i am pretty hopeful that between the two um we should 00:35:10.000 |
have uh uh a pretty solid um way where like as many um people whether they are humans or not humans can 00:35:21.520 |
do whatever they want in this repo and only the stuff that um is actually good will make it all 00:35:28.640 |
the way in and all the way to prod basically so if you want a vibe code and prod you can and the goal 00:35:33.600 |
is to like let make sure the repo will tell you when you need to stop vibe coding and actually read the 00:35:39.120 |
stuff basically uh it's kind of kind of the goal can you see if there's a i'm trying to think if there 00:35:48.880 |
if he has like a little like a cookbook maybe um you said you said you're on ruby right k 00:35:58.000 |
i presume yes so like if you've got rails then you can you know uh you got ruby with the right version 00:36:16.160 |
um then you have all of the you know you got all of these start with me's run and then you got test 00:36:20.800 |
lint server install um and then like for mine this uh this will have uh you know all of these tests if 00:36:31.200 |
you want to build a run you just set it up and clean it if you want to manage the server like here's uh 00:36:37.120 |
the other repo has like me's run start db me's run uh uh like me's run start front end uh oh yeah here 00:36:47.920 |
we go like so i think this is actually for the other repo so like there are three different types of 00:36:52.960 |
services if you just want one if you just want one run of one or if you just want um uh you know all 00:36:59.920 |
three then you will or if you want to run one of the things continuously then you'll be um you'll be 00:37:13.920 |
if there is this latest finished up here yet what is this this okay here we go 00:37:23.200 |
you can see he's right yeah so well yeah so as you can see here um now that he if he can get it 00:37:34.800 |
configured correctly uh then um between trunk and me's if he's messing up package installations etc then 00:37:46.320 |
it's going to like lock him out etc okay so quick start commands uh let's do it let's see uh we're gonna 00:37:53.440 |
gonna do we need to run setup oh no okay uh let's see trunk installation uh trunk check and trunk format 00:38:07.200 |
okay well let's see if trunk can fix this by itself uh trunk checks all that's with fix actually i don't 00:38:14.240 |
need to run all actually i should probably just for fun 00:38:26.400 |
okay and so we have all of these kind of warning vulnerable to 00:38:30.800 |
denial of service thank you trunk good find um and then um needs run setup maybe okay um 00:38:40.640 |
needs trust me's install me's run setup let's double check please trust me's install 00:38:54.960 |
you try uh those commands i'm seeing npm errors is that expected 00:39:13.040 |
uh let's see let's try a me's run dev and see if that'll work i mean run devs 00:39:21.600 |
oh yeah i know this one uh me's use uh ipm trunk trunk io launcher at the latest 00:39:38.960 |
uh back let's see is this the same field to install 00:39:46.720 |
uh oh yeah so i gotta try this is the trunk bit so let me see if there is a 00:39:59.440 |
uh like a quick start here because i think there's like a little trick to get this going 00:40:26.800 |
i'm trying to uh let's see uh let's see uh uh this is going off 00:40:38.880 |
1.25.0 okay um let's see if the me.toml is going to just get rid of that for now 00:41:04.480 |
okay uh so now there's a bot that is in my uh in my other discord server which is the second iteration 00:41:20.640 |
option on my uh bot so cool i've got a dev let's see what else i might uh i might be i might do here 00:41:27.440 |
read me for this guy is what i want cool me's trust me's install me's run setup 00:41:34.640 |
uh dev uh okay sure let's try a build to start and a clean 00:41:51.120 |
and just get rid of that on the coverage okay so we have a coverage we have like a me's run test maybe 00:41:56.240 |
uh i don't so i don't want this one anymore i want this guy 00:42:05.360 |
uh let's see okay so me's run test unit integration and coverage 00:42:31.600 |
so i presume it'll take like a little bit of getting used to for people to like oh i'm used 00:42:39.600 |
to having to remember all this stuff uh but you don't have to uh in this one we just uh need your own 00:43:00.800 |
um let's see if that'll work actually i think it will 00:43:07.040 |
okay for me anyway um still some stuff to dial in and it's hard to just drop this into a secondary 00:43:17.760 |
repo unfortunately um but let's try let's see what else we got um uh and then yeah the other like a 00:43:27.520 |
handy thing can be knees release tasks it's this and then yeah so this is this has like all of my 00:43:36.720 |
globals and then it also has um like what i've got in here if i go that these tasks 00:43:43.360 |
these tasks so now i have all of these so it's not interfering with my other one um i need to like 00:43:52.800 |
i would like to get it to a point where i can just drop it into a repo and it can insta work but we will 00:43:58.720 |
see um yeah me is end check we have here there we go cool um me is let's see format cool thanks uh me is 00:44:10.400 |
integration uh okay now um use unit uh means vet let's check the types so that like id yeah so did perhaps 00:44:23.840 |
that's like maybe a little bit of a of a decent idea of where this setting where it's like 00:44:30.160 |
just run me's tasks this is everything you could possibly do in the repo it all works the same across 00:44:35.280 |
all of us it all works the same in cicd um and then we all get the same like linting formatting etc etc 00:44:40.880 |
which is the standard that like we all agreed on before we started working on the repo kind of thing 00:44:46.160 |
um and i have successfully yapped for 50 minutes straight so i guess if anybody i'll pause it again 00:44:53.120 |
for uh any i don't know thoughts comments questions concerns 00:45:09.280 |
no nothing is it a good idea or a bad idea what do you guys think dead silence 00:45:13.920 |
yeah i'm quite curious if you guys have ever ran into like 00:45:23.600 |
because my my my usual issue with these tools is that um they can be kind of wonky and if they're 00:45:31.680 |
behaving wonkily it doesn't make people want to use them and it just makes them annoyed um 00:45:39.200 |
so if you guys have you guys ever tried to have something that's doing like code quality audits 00:45:44.000 |
and ever like gotten annoyed at it or had like a good experience with it 00:45:51.680 |
yeah that's fair well yeah i'm quite interested to see if this um uh let's see successfully build trunk 00:46:01.200 |
versions interesting so these are working i've never been a fan of like automated code audits but i think 00:46:10.640 |
from playing around a little bit um we're like just running codex with custom prompts that like make much 00:46:16.880 |
more sense in the context of your own code base those results were pretty interesting um 00:46:23.280 |
because because they're like much more about what is important to the code base and like generic linting 00:46:29.760 |
things um which yeah i don't know i think there's like a lot to explore there especially if you're like 00:46:37.120 |
able to have the agent run um you know run interact with your system for real the same way it does while 00:46:44.720 |
you're developing i think that for code review could be pretty interesting well yeah so not only that but 00:46:51.040 |
but they're uh uh for cloud code and codex you can use those in ci um so i could or i plan to set this 00:46:59.120 |
up such that like so the annoying part was like uh you know if my if something's weird about my environment 00:47:05.440 |
i can't actually get anything merged because it always rejects because these code you know the code quality 00:47:10.480 |
checks are dumb and they don't know when they need to make make an exception but so instead of fully 00:47:16.080 |
rejecting the pr what i can do is just like dump the the the failure the failed ci check as output and 00:47:23.920 |
then at claude and be like hey what's wrong with this make us a new issue if we need one then um like 00:47:31.520 |
ping the person that just tried to push this on slack and then get started working on a skeleton of a pr 00:47:37.200 |
that's going to resolve this new issue um to hopefully like get the whole thing into uh uh uh as close to 00:47:44.320 |
full auto as i can get it um if i can just if i can just me's build feature uh that's kind of idea 00:47:51.520 |
the the ideal state that i'd like to get this to i'm not sure i can get it all the way there but i think 00:47:56.560 |
i can get it close um uh which is also nice because like uh or like manuel and and kay you guys are you guys 00:48:05.440 |
are both working on the same repo and you both are are competent agent developers do you guys ever like run into the 00:48:11.120 |
the problem of like too much slop is getting pushed or like my agent is not doing the same thing manuel's 00:48:16.880 |
is kind of thing all the time too much is getting pushed exactly no i think that's actually one of the 00:48:24.240 |
the key things that has manuel working on this type of cicd issue is like can we get in the loop and fix that 00:48:35.120 |
yeah to me that seems like the like getting the agent to generate code is not a problem 00:48:40.640 |
um getting that code to eventually be not slop and good is something you can do on your machine 00:48:47.760 |
with enough like wrangling sure um but once you get that wrangled to where you can push good code 00:48:56.400 |
consistently how can i trust any of that because i can't no way no shot i'm reading every line 00:49:01.760 |
of code that these agents are going to put in this repo so how do i kind of get around that well the 00:49:06.880 |
step one is like your agent and my agent have to be the same um and one of the cool things about me is 00:49:15.280 |
is because it's just running scripts i can do something like me's agent yikes or me's agent manuel or me's 00:49:22.880 |
agent kevin um and what that can do is just uh uh it can if there's like a dot claude md here or if 00:49:30.880 |
there's an agent's md or like you have something that's got repo specific stuff um if there's one 00:49:37.440 |
that's in version control that has the ones that we all think are good for this repo and then there's 00:49:42.320 |
ones that you're experimenting with right now today um then you can be like me's agent sync and then you 00:49:49.360 |
can ping kevin on slack and be like yo check out the check out this new like command that i'm playing 00:49:54.720 |
with here this little workflow i'm using and then kevin you can go like me's agent config manuel um and 00:50:01.520 |
that will like temporarily overwrite your config um provided that yours is like synced in the last 00:50:07.600 |
state that you liked it um and you guys can just sort of like hot swap between each other's um uh agent 00:50:13.520 |
configs until you arrive at like okay this is the one that we should both be using when we're working on the 00:50:17.360 |
we should both be using when we're working on this part of the code base today um and then you can you 00:50:22.720 |
can sync that to version control um it's kind of the general thought that i have but the the yeah the sort 00:50:29.520 |
of the linchpin is like i need this ephemeral environment because i don't want to ruin your 00:50:33.280 |
config in your tool chain um but i also want us to not have to like go at human speed to try and figure out 00:50:40.720 |
oh like what is the prompt we should send to this agent that we typed with our meat fingers that worked for 00:50:45.600 |
this one thing like i'd see which that's that's very 2024 ancient history uh so i'd like to get away 00:50:52.320 |
from that if i can and i think this this is the direction i'm currently exploring to try and get 00:50:56.800 |
get to that direction essentially um but yeah i guess uh muse and trunk and uh uh slate ad as uh while i'm 00:51:05.760 |
while i'm at it uh just configuration uh by npm was already available in your system okay it's annoying 00:51:13.920 |
and when i run the stuff it's still like yells at me is that fine i e these mans are running anyway is there a 00:51:26.080 |
way you can that up or dude there's a point i also have available in use in there fighting 00:51:35.520 |
um yeah i guess we'll we'll do a we'll do a quick slate plug there and then uh i'll do a quick plug for i'm 00:51:47.920 |
doing a thing on wednesdays over in my server that's very reminiscent of this in which yeah like uh i'm 00:51:55.200 |
trying to like run around and find people that are like building like cool tools or um uh you know 00:52:02.160 |
doing something interesting related to uh the optimization of the use of agents to get to be working 00:52:10.320 |
in code bases and trying to go like hassle them and do little little meetup things so if you did 00:52:15.840 |
not get enough ai in action in your life um i will i'll drop uh i'll forward the the one of the luma 00:52:22.560 |
events into the ai in action channel so people can can come through next week i think i thought i had a 00:52:28.640 |
plan for next week for who i was going to grab i'm not entirely sure but uh yeah yeah if you have 00:52:33.360 |
something and you don't uh if there is too many people signed up to run ai in action and you also 00:52:40.800 |
need a wednesday feel free to to let me know and i can see if there's uh something we can set up for 00:52:45.520 |
you um but yeah you know if you're if you're interested in more meetups like this then there's a second one 00:52:51.520 |
available for you yeah we've got one minute anything 00:53:01.520 |
i'm good i wonder if uh is cable still here usual host i think he's gone right because otherwise you 00:53:17.920 |
would have said sorry i'm here i got i got slack sniped somebody sent me some requests for things 00:53:24.880 |
that i'm trying to deal with um awesome thank you yikes for jumping in last minute and uh thank you 00:53:31.200 |
to our we do have a volunteer for next week so we've got that figured out 00:53:36.000 |
uh i do want to once again encourage you all to sign up with topics you're interested in request 00:53:44.800 |
speakers do do whatever we can to get some of this lined up ahead of time because uh you know i 00:53:50.240 |
appreciate yikes and manuel just jumping in when they jump in but it's nice to know ahead of time if 00:53:54.560 |
you're going to be on uh sharing something and often we can get uh it's it spares us that like first 00:54:01.520 |
15 minutes of setup time cool thanks everybody happy friday gg uh yeah check out uh all the