HomeVideos

This is the only AI I want to use

Now Playing

This is the only AI I want to use

Transcript

386 segments

0:00

This is some code for SolidJS. Now,

0:02

notice I'm using signals incorrect. I

0:04

should be using the show component. We

0:06

wait for the LLM. And boom, we have the

0:08

show component. So, what you just saw is

0:10

a little project I call 99. And the

0:13

reason why I haven't kind of been

0:15

pursuing 99 is because I don't really

0:18

feel like I fit in today's kind of

0:20

modern world of AI. And let me explain

0:22

that. On one side, you have the no AI

0:24

side. I've always kind of been

0:26

interested in AI since day one. I've

0:28

played around with it. have saw a lot of

0:29

the sharp edges. I highly still

0:31

recommend to people that if you're

0:32

building production apps, you should be

0:34

just knowing and understanding every

0:36

single line of code you produce. Uh be

0:38

very careful. Please don't vibe code

0:40

production apps that especially that

0:41

take people's information out there.

0:43

Okay, it's going to end oh you know

0:44

horribly. And then on the other side you

0:46

have obviously the vibe coders, the

0:48

people that are out there just producing

0:49

raw code and who knows what kind of the

0:51

consequences or problems that actually

0:52

exist in between there. I obviously like

0:54

programming. Okay, I enjoy the actual

0:57

raw activity. I know there's people out

0:59

there like, "Ah, it turns out

1:00

programming was never the thing I

1:02

liked." No, programming is in fact the

1:04

thing I like. But more importantly, I'm

1:06

actually a pretty terrible reviewer.

1:08

When I actually am reviewing other

1:09

people's code, I am not that good at

1:11

seeing the problems and all that. It

1:13

takes me a long time to really review

1:15

the code. So, when an AI generates a

1:17

bunch of code, like a single piece of

1:19

code that would have taken me, say, 15,

1:21

20 minutes to write takes me maybe like

1:23

an, you know, a half an hour to review.

1:25

That's not obviously always the case,

1:26

but I I've never just been a strong

1:28

reviewer. And maybe that's a skill I

1:30

need to get better. And so I've always

1:31

kind of just lived in this world where

1:33

okay, well, I don't recognize and I

1:34

don't really identify with the no AI

1:37

people, but I'm certainly not a v viber.

1:39

So what should I be? And for a long

1:41

time, I was kind of this autocomplete

1:43

and that's it person. Like I loved tab.

1:45

Cursor tab I'd argue is one of the best

1:47

in the game. Okay. Uh game recognizes

1:49

game. That thing is actually incredible

1:51

what they have built. Huge fan of Super

1:53

Maven and everything that they have

1:54

done. But I've always wanted more,

1:56

right? Like, how do I take advantage of

1:58

all of this super fast generation of

2:00

code? But how do I make it do it the way

2:02

I want to do it? Is there a middle

2:04

ground that's somewhere between the tab

2:06

world and the vibe world? I think I may

2:09

have created it. That little example you

2:11

saw at the beginning was called 99. It

2:13

is my attempt at really trying to create

2:16

an experience programming that takes

2:18

advantage of AI but still puts me first

2:21

in the driver's seat because I have this

2:23

thing called lack of skill issues when

2:24

it comes to programming. I can actually

2:26

program. I have talent and and stuff

2:28

built up for many decades at this point.

2:30

So that means I kind of know what right

2:33

generally looks like and I'm can direct

2:35

an AI really fast if I can direct it in

2:38

a very fine grain way. So let me give

2:39

you a couple kind of like little

2:41

examples of what's going on. So, one of

2:42

the first things I can do is I can just

2:44

take this entire thing right here, which

2:46

is just a Cloudflare worker, and I can

2:48

just say, "Hey, convert uh this

2:50

Cloudflare worker to Hono." And notice

2:53

that it highlighted Cloudflare right

2:54

there. It identified on my machine I

2:56

have a skill called Cloudflare. So, it's

2:59

actually going to go through and make

3:00

sure that it actually uses all the

3:02

information about Cloudflare and then

3:04

convert it to a Hono worker. You can

3:06

even see right here, this is its

3:07

internal dialogue or whatever you call

3:09

that. I'll convert this Cloudflare

3:10

worker to use Hono. Let me write the

3:12

converted code to a temp file. All

3:13

right, there you go. We've converted it

3:15

all. Uh, is this good? Is this bad? I'd

3:17

have to review it, but you can see that

3:19

I can do a really large change to the

3:21

code base pretty easily. But this is

3:23

where I think it's actually a lot more

3:24

interesting. Let's say that I have

3:26

something called a game container, which

3:29

I do in this situation. It's Vim Royale,

3:31

and I want to be able to create a

3:33

matchmaking server. And I want this

3:34

server to be kind of like a stateless

3:36

one. One that I don't actually have to

3:37

have say a running durable object, but

3:40

instead I use D1 the database offering

3:42

as a means to do this. No, this is not a

3:44

sponsored post. This is not any of that

3:46

crap. This is me just trying out various

3:48

Cloudflare utilities. All right, so the

3:50

first thing I need to do is actually

3:51

create like a N variable. So I'll create

3:53

a m a matchmaking interface. jump in

3:55

here, take that and just go uh

3:57

Cloudflare end with D1, which is the

4:00

database uh the Jawat uh session. Let's

4:04

see. End um the game container. There we

4:07

go. Write those things out. It's

4:08

creating me a nice little end. Then I

4:10

can go export async uh function. What is

4:14

it? What are we going to call this? Get

4:15

game. We can have the ID as a string.

4:17

And then we can do a promise uh promise

4:20

game state. Now, notice that it's

4:22

actually going over there and it's

4:23

actually creating the stuff for me. So I

4:25

don't have to worry about that. Here I

4:26

can just be like return game state from

4:29

a games table. Uh using Cloudflare.

4:31

Notice I keep saying the word Cloudflare

4:33

because again I just wanted to use my

4:34

rules around it. It highlights it nicely

4:36

for me. There we go. Using Cloudflare.

4:38

Then I can go export a sync function set

4:41

game state uh GS game state and then hit

4:45

it with a promise void and then there we

4:47

go. So this is kind of what I really

4:48

would like uh using Cloudflare store

4:51

game. There we go. uh export async uh

4:55

function get all games. And so this one

4:58

right here should probably return a

5:00

promise. Oh, we should not call it all

5:01

games. Get um get uh joinable, right?

5:05

Joinable games, right? That makes way

5:07

more sense. And that should probably be

5:08

a game state with an array. All right,

5:10

so there we go. Game state with the

5:12

array. Jump in here and I can go like

5:14

this. Get games that are in a nit or

5:17

matchmaking uh for Cloudflare D1. Boom.

5:21

There we go. And now you kind of get

5:23

this idea. Like I've never actually used

5:24

a D1 in my life. I h I don't even know

5:27

what underlying database D1 uses. I just

5:30

know that D1 exists. I don't know how to

5:32

specify it. I don't know how to import

5:33

it. I don't know nothing. But yet right

5:35

here, I was able to grab all that

5:37

information. Get this bad boy right

5:39

here. Even though KV namespace is not

5:40

quite the right thing. It should be a

5:42

string, you idiot. And then of course I

5:43

can do something like this. I can do a

5:45

little get game right here. It's going

5:46

to go in. It's going to get the game.

5:47

It's going to do a little selection

5:48

right here. Pretty fantastic. Beautiful.

5:51

I don't, you know, would I throw an

5:52

error? Probably wouldn't throw an error.

5:54

Probably find a better way to do take

5:55

care of this. Set game state. This all

5:57

looks really, really good. This is

5:59

exactly what we're talking about. Get

6:01

joinable games. We're going to have to

6:02

do a select ID from where in initialized

6:04

or matchmaking. This is exactly kind of

6:06

how I would do this. The only big

6:08

difference I would make is this right

6:09

here. I'd much rather actually use the

6:11

game, the server game states as opposed

6:13

to just simply like raw dogging it right

6:16

in there. All right, let me create two

6:17

last functions and we'll have kind of

6:18

matchmaking done. I'll do a little

6:20

export async function. Uh create new

6:23

game. Actually, we don't want to export

6:24

this one. This one's only for us. Okay.

6:26

Uh and this should probably return a

6:28

promise of a game state. And we can go

6:31

like this. Just uh create game to create

6:34

a new game and return out the game state

6:37

after saving it to the uh D1 uh

6:40

CloudFlare. Boom. Nice. Async export

6:44

async function. Um, join game returns a

6:48

promise of a game state. Nice. That's

6:51

going to be right in here and go like

6:53

this. I had to kind of specify this one.

6:54

Uh, join the highest player count uh

6:58

server with matchmaking as the uh state.

7:01

Two, wait for a game server with state

7:05

of matchmaking.

7:08

Uh, three, create a new game if one and

7:11

two cannot happen. Cloud flare. Boom.

7:14

Tag it with that scale. And there you

7:15

go. So, as you can see right here, we're

7:16

creating the environment right here.

7:18

We're doing this bad boy right here.

7:20

Okay, we have this nice little set game

7:21

state right there. Perfect. And then we

7:23

can join the game right afterwards. Wait

7:25

naturally for what happened there. All

7:27

right. And this code right here, as you

7:28

can see, very weird numbering system. A

7:31

little 1 2 1 2 3 classic 1 2 1 2 3. So,

7:35

this is my ideal version currently of

7:37

AI. Uh, it just it kind of gives me that

7:40

control that I want where I'm also

7:42

having the speed, right? I'm determining

7:44

kind of the API how things should be

7:45

called. I can see kind of the building

7:47

blocks. Okay, I want like a a get and

7:49

set game. Then I want to be able to get

7:50

joinable games. I want to be able to

7:52

create new games. And then I want to be

7:53

able to join games. So I can kind of

7:54

like structure the code how I want. And

7:56

then I can actually have it generating

7:58

as I'm kind of structuring the code how

8:00

I want. Then I can kind of go back

8:01

through and fix little each little

8:03

piece. It just feels faster because

8:05

instead of being handed this just giant

8:07

diff of code, instead I'm just

8:09

generating one chunk at a time precisely

8:12

the chunk that I want to be generated.

8:14

Then I can also add these kind of

8:15

skills. I don't even know why they call

8:17

them skills. I'm not really sure what it

8:18

is. I'm not even sure if it really is a

8:20

skills. Okay. Uh let's go. Personal

8:23

skills. Skills. Cloudflare. This one.

8:26

This is really just me saying, "Hey,

8:28

this is how I want things to be

8:29

formatted. This is how I expect you to

8:32

be able to do things. I want you to be

8:34

able to create an env object every

8:35

single time. If you're going to be

8:37

creating uh anything to do with

8:39

configuration, I want you to specify it

8:41

this way. But at the end of the day, is

8:43

this the best AI? I mean, I think

8:44

there's a real world out there where uh

8:47

things are just going to continue to

8:48

improve and at one day people who hand

8:51

program will be the dinosaurs. Like

8:52

that's is this the time where people are

8:54

trans, you know, transferring from

8:56

handwritten machine code into compilers

8:58

and I'm over there like you boys are a

9:01

bunch of right? like, oh, is

9:02

that is that what's happening to me? I

9:04

actually can't tell. Will there still be

9:06

room for these type of tools, this

9:08

intermediate space that I'm talking

9:10

about? Will this actually be useful?

9:11

Maybe maybe people will really like

9:13

this. And maybe there does exist a world

9:15

for quite some time where people still

9:17

want to hand roll their code. Like me

9:19

personally, I'm just I'm just a bigger

9:21

fan. I like to know what's going on. And

9:23

perhaps that's an insecurity on my

9:25

behalf. I don't care what you guys have

9:26

to say, honestly. This is me just trying

9:29

to figure out and navigate this kind of

9:31

confusing world because at the end of

9:32

the day it is a weird rule. Like can you

9:35

fully trust a vibe coded app? Absolutely

9:37

not. Are people actually being able to

9:40

review 10,000 lines of code a day?

9:42

Absolutely not. When someone tells you

9:44

that they're lying to your face. And so

9:46

there's a lot of questions that I have

9:48

about this entire universe and how it's

9:50

going to look over the next couple

9:52

years. I think the next couple years are

9:54

going to be pretty dang complicated.

9:55

Anyways, if you want to give this thing

9:57

a shot, it's called uh 99 is what I

9:59

called it. We have uh some decent

10:00

contributions going. It's still pretty

10:02

kind of sharp edges. The skills thing is

10:04

just kind of landing on a separate

10:06

branch that I call skills version two

10:08

cuz I already had skills version one.

10:09

And I want to make still a bunch of

10:11

changes. Maybe I, you know, honestly, I

10:13

have a lot of thoughts about skills and

10:15

how they should be done. And I think

10:16

cursor actually got a lot of stuff right

10:18

really early on and I wish other people

10:19

would have followed their approach. But

10:21

nonetheless, this is me trying this is

10:22

me trying to make sense in a crazy world

10:25

that we have and still trying to really

10:27

understand actually programming and what

10:30

it's going to look like in 2026 2027. So

10:33

give it a try. Uh by the way, if you're

10:35

watching this video a little bit later

10:36

today, I'll be doing a live stream and

10:38

I'll be kind of fielding some requests

10:41

for various new features, what people

10:43

think should be done. I have some ideas

10:45

about debugging and semantic search that

10:47

I'd really like to add to the codebase,

10:49

but right now I'm just kind of focusing

10:51

first and foremost on just the uh

10:54

creation side of it. Can we get in code

10:56

generation? Anyways, I hope you enjoyed

10:58

this video. This really is my current

11:00

dream AI. Yes, I will never be as fast

11:03

as those people that just Dario take the

11:05

wheel the vibe coding. I hope you

11:06

enjoyed the video. Uh please leave a

11:08

comment and tell me like honestly real

11:10

talk is there room in this world for

11:12

this type of plugin? I don't know. May

11:14

maybe this is one of those things where

11:15

I'm the one being delusional. I think

11:18

that somehow I can maintain my own

11:20

agency in the world of agents doing all

11:23

the coding and I'm just kind of delaying

11:25

the inevitable. Or maybe I'm just trying

11:27

to make something fit that doesn't need

11:29

the fit. I honestly don't know and I

11:31

don't know if this plugin is going to be

11:32

great longterm, but it's just me trying

11:34

to make sense of the real world. And I'd

11:35

love to hear your thoughts on this. Do

11:37

you actually think there's a world where

11:39

this can thrive? But either way, this is

11:41

my ideal AI setup. And I hope you

11:44

enjoyed the video. The name is the 99

11:46

Agen. For those that don't know, I

11:48

actually named the library after this

11:50

right here, the Halo sniper rifle, the

11:52

SRS9.

11:54

Uh, and that's because I kind of looked

11:56

at the world and it kind of seems like

11:58

AI is like a shotgun. You're just

12:00

blasting everything. Not really a lot of

12:02

aim. Shoot from the hip. Whereas like a

12:04

sniper rif, you got to take it. You

12:05

know, you're actually thinking through

12:07

things. is you got one shot, one bullet,

12:09

one target. And it's a bit more of a

12:11

thoughtful kind of approach as opposed

12:12

to just like the spamming make anything

12:14

happen kind of approach, not the spray

12:16

and prey. So that's why it's called the

12:18

99.

12:21

Hey, do you want to learn how to code?

12:22

Do you want to become a better backend

12:24

engineer? Well, you got to check out

12:25

boot.dev. Now, I personally have made a

12:27

couple courses from them. I have live

12:29

walkthroughs free available on YouTube

12:31

of the whole course. Everything on

12:33

boot.dev you can go through for free.

12:35

But if you want the gamified experience,

12:37

the tracking of your learning and all

12:39

that, then you got to pay up the money.

12:40

But hey, go check them out. It's

12:42

awesome. Many content creators you know

12:44

and you like make courses there.

12:46

boot.dev/prime for 25% off.

Interactive Summary

In this video, the speaker introduces project "99," an AI-assisted coding tool designed to provide a middle ground between manual coding and mass AI generation. He explains his frustration with "vibe coding"—where AI generates large blocks of unreviewed code—and highlights his preference for a more precise, chunk-based approach where the developer remains in control. By using "skills" to define specific formatting and configuration rules, the speaker demonstrates how "99" acts like a "sniper rifle" for code, focusing on precision and agency rather than the broad, often messy output of typical AI tools.

Suggested questions

4 ready-made prompts