HomeVideos

You're using AI agents wrong

Now Playing

You're using AI agents wrong

Transcript

1433 segments

0:00

I have a confession to make. Ever since

0:01

I started focusing more on running my

0:03

company and running my YouTube channel,

0:05

I have been less good of an engineer.

0:07

Not that like my code is worse or I'm

0:09

holding the team back. Okay, I am kind

0:10

of doing that, but more I'm just not

0:12

able to spend as much time coding. I

0:15

rarely get a moment where I can sit by

0:17

my computer and I'm not behind on other

0:19

more important things that only I can do

0:21

like email or filming or working with

0:24

sponsors or all this other stuff. And I

0:26

love it. I'm not complaining. I'm very

0:27

happy with where my job, my team, my

0:29

companies, and my life are, but I did

0:31

miss coding a lot. I just like being in

0:34

the trenches, solving hard problems,

0:36

building cool stuff, and seeing the

0:38

software I use every day improve as we

0:40

make changes and just make it better.

0:42

These are things that are really fun and

0:44

important to me, and it's really sad

0:46

losing that as I've had to focus more

0:48

and more on everything else. Which is

0:50

why when you look at my rate of

0:51

contribution to a project like T3 Code,

0:53

you see uh oh, I'm landing as many as 50

0:57

PRs a week. Huh. I know it says commits,

1:00

but we squash merge. So, what this

1:02

actually means is the amount of PRs I'm

1:03

merging. And you'll notice a bit of a

1:05

spike in mid July where I went from 1 to

1:08

three a week to 23, then to 37, then to

1:12

41, and then all the way up to 52. Huh.

1:16

I guess I just wasn't that busy during

1:18

this window. Oh, wait. The week of

1:20

August 7th, I was traveling. I was at

1:23

Defcon. And somehow between my flights,

1:25

my Ubers, and my awful internet at the

1:28

hotel at Defcon, I managed to get 52 PRs

1:32

landed. Huh. Okay, I may have bathed you

1:34

guys a bit. I finally found flows that

1:37

allow me to be as productive as I want

1:39

to coding while also having to run the

1:41

rest of my life. And while I may not be

1:43

at potatoes level where she's landing

1:45

like a thousand a month, I also have to

1:47

run multiple companies. Which means that

1:49

a CEO that is a part-time coder is

1:52

somehow probably outshipping you. And if

1:54

that is the case, I think you'll like

1:56

this video a lot cuz I don't want to

1:57

keep any of this secret. I'm just going

1:59

to show you guys exactly how I work. And

2:01

if all goes well, I'm going to land some

2:03

real changes while I'm filming this

2:04

video. I've never done anything like

2:06

this and I'm admittedly kind of scared.

2:08

I'm going to be showing my ass a bunch

2:09

here. This is a a very revealing video

2:12

where I show how I work. Not all of it

2:14

will be perfect. Not all of it should be

2:15

copied, but at the absolute least, I

2:17

think you can learn some really cool

2:19

things. And the first really cool thing

2:20

I want to show you guys is today's

2:22

sponsor. If your agent doesn't have

2:23

access to the web, it's probably not a

2:25

very good agent. The knowledge in the

2:26

models is not enough to make them

2:28

effective at the things we want them to

2:29

do today, which is why they need a

2:31

browser. And if they're just using the

2:32

browsers that are available to them

2:34

through the existing APIs, they're

2:36

probably going to get stuck a lot

2:37

because over 80% of the web cannot

2:39

simply be curled or fetched over APIs.

2:41

That's 80% of the things your agent

2:44

could use to do better that it just

2:45

doesn't have access to. Unless you're

2:47

using today's sponsor, browser base.

2:48

They built the best browser for agents

2:50

so that they don't have to be limited to

2:51

the 15 to 20% of the web that they can

2:53

access over curl. They can now access

2:55

everything. Whether you want to do

2:57

simple searches or fetch context from a

2:59

given URL in a way that your agents can

3:01

actually read and use, or if you want a

3:03

full endto-end browser where your agents

3:05

can click buttons, sign into pages,

3:08

complete real actions, and get real

3:10

things done, browserbase has you

3:12

covered. And it's not just useful for

3:13

getting data from other places. It's

3:15

also useful for testing your own things,

3:17

too. If you want to make sure certain

3:18

regressions stop reappearing in your app

3:20

or certain flows are guaranteed to work

3:22

24/7, you can set up an agent with

3:24

browser base to be constantly testing

3:26

them, actually going through flows

3:28

before a user ever hits a bug. And as

3:30

smart as agents are, they do often get

3:31

stuck when they're trying to use

3:32

browsers. Whether they're hitting from

3:34

an IP address that's blocked or they're

3:36

trying to get around to capta, they get

3:37

stuck often unless you're using

3:39

browserbased because they've figured all

3:41

of this out for you, unblocking your

3:42

agents as they navigate the web. There's

3:44

a reason everyone from Microsoft to

3:46

Deepmind is using browserbase and you

3:47

can figure it out yourself at

3:48

soy.link/browserbase.

3:50

So let's dive in to how I get so much

3:53

work done recently. Obviously first and

3:56

foremost having good AI tools to work

3:58

with is essential in getting your work

4:00

this much more effective at being

4:02

delivered. I will also say that a lot of

4:04

the changes I've been making to T3 code

4:06

have been from my experience working

4:07

this way and trying to improve so I can

4:10

ship even more. Here is one that a

4:12

chatter mentioned while I was streaming

4:14

that seems pretty legit. If you use the

4:16

dollar sign to trigger skills, this

4:19

works great for skills that are in the

4:21

project or out of the project. But there

4:24

is a catch. If the skill can only be

4:27

invoked manually, which is a condition

4:29

you can put on a skill, it only works

4:31

with the slash command. It will not work

4:34

with the dollar sign command version

4:36

because a slash command version can

4:38

enable a skill that isn't already on

4:41

that the model can't trigger itself, but

4:43

only the slash command at the front is

4:46

able to trigger skills that have to be

4:47

manually triggered. This is a bug I

4:50

didn't know about because I don't have

4:51

manual only on for many skills and even

4:53

those ones I don't use that much. So, I

4:55

haven't encountered this, but it's a

4:56

legit bug that I just didn't know about

4:59

that I now know about. So, let's see how

5:02

I work. Step one, new thread. I have a

5:04

hotkey for it. Step two, paste. Step

5:07

three, and this one's really important

5:09

in my opinion. Make sure it's not

5:10

running on your computer. I'm not saying

5:12

make sure it runs on someone else's

5:14

computer. I'm saying that the laptop or

5:16

whatever other machine that you're doing

5:17

other stuff on should not be held back,

5:20

bottlenecked, or required for this work

5:22

to be completed. Ideally, you have some

5:25

setup. For me, the way this works is I

5:27

have a Linux box in the other room that

5:29

is oversp spec, but doesn't even need to

5:31

be. Watch my Linux video if you haven't

5:32

yet. It'll be very helpful here. And

5:34

that Linux machine has all my code bases

5:36

on it and a T3 code server. So, I can

5:38

select BB1, which is my box in the other

5:41

room to be the box that's going to run

5:43

these changes. That box is selected. It

5:45

has all of my harnesses, codecs, and

5:47

cloud available to it. And I'm going to

5:48

tell it what I want. Also note, I'm

5:51

doing this in a work tree. I don't think

5:52

work trees are the best solution to a

5:54

lot of the problems as they exist today,

5:56

but they're a good enough abstraction,

5:57

especially if your file system handles

5:59

them well, that you can just spin up a

6:00

bunch and it's mostly fine. So, let's

6:02

get this one going. Before I do this

6:04

though, I do want to call out we are at

6:06

the very surface level right now. Where

6:08

things are going to get really cool as

6:09

we go is the work I did to T3 code

6:12

itself to make both working in T3 code

6:15

easier, but also to add features and

6:17

remotely build things into T3 code

6:20

easier. So T3 Code itself I've improved

6:22

to make it easier to work this way, but

6:24

the T3 Code repo has examples on how to

6:27

set up other projects to work well in

6:29

multi-threaded multi- aent thread

6:32

environments. So let's kick this one

6:34

off. I'm going to use voice to text here

6:36

because uh I'm down a hand and Whisper

6:39

Flow has been nice for this type of

6:40

thing. So let's get going. This is an

6:42

issue that's been affecting a number of

6:44

users as of recent. I was unaware of it

6:46

till now. I want to make a fix that is

6:48

both simple in its implementation and

6:51

not confusing to users when they try to

6:53

use it. In my opinion, you should be

6:55

able to use the dollar sign to call any

6:57

skill anywhere in the composer and have

7:00

it link correctly. I'm not sure about

7:02

the characteristics in cloud code as to

7:04

how these behaviors are triggered or

7:06

even how the skill that I'm seeing in

7:08

the composer becomes the right text for

7:11

the model to add it in. I want you to do

7:13

a thorough audit of both Claude Code's

7:15

behavior as well as how we are

7:17

implementing that behavior. If you see a

7:19

simple fix that we can apply to solve

7:20

the problem, stop and let me know so we

7:22

can apply it ASAP. Come back when you

7:24

have a confident solution to the problem

7:27

with a good experience for our users.

7:29

There's a couple pieces of this prompt I

7:31

just spoke that I want to explain. This

7:33

one isn't necessary, but I found it

7:35

helps to let it know that a number of

7:37

users are affected. This isn't some

7:38

small side project that this is a

7:40

problem. This is a thing that is

7:41

affecting real people. It gives it

7:42

context that this is important and

7:45

should be done reliably, not just

7:47

experimentally. I was unaware of it.

7:49

Doesn't really matter. Just settle

7:56

in implementation and not confusing to

7:57

users when they try it. I've now given

7:59

it my priorities. I want this code not

8:01

to be super fast, not to be super

8:03

detailed. I want it to be simple and I

8:06

want it to be built in a way that is not

8:08

confusing to users in my opinion. And

8:10

here is where I'm telling it

8:11

effectively, I'm okay with you

8:13

overriding this or ignoring this part.

8:15

This sentence where I said, I want to

8:16

make a fix that is simple implementation

8:18

and not confusing to users. That's a no

8:20

compromise line. I am saying very

8:21

clearly this is my expectation. I then

8:23

say in my opinion because if this thing

8:26

isn't viable, I want it to tell me as

8:28

such or if it thinks there's any reason

8:30

I shouldn't do this, it'll be honest

8:31

with me. You could also use something

8:33

like the Matt grilling skill for this,

8:34

but for a one-off issue, you shouldn't

8:36

answer 50 questions. So, in my opinion,

8:38

you should be able to use the dollar

8:39

sign to call any skill anywhere in the

8:41

composer and have it link correctly.

8:42

This is giving it the contest of my

8:44

expectations, but also giving it the

8:46

room to push back. I'm not sure about

8:48

the characteristics in Claude code as to

8:50

how these behaviors are triggered or

8:52

even how the skill that I'm seeing in

8:54

the composer becomes the right text, the

8:56

model expects to add it in. This is me

8:58

saying where I am at with this

9:01

understanding. both so the model doesn't

9:03

blindly trust the issue and the things

9:05

I've told it, but also more importantly

9:08

so it'll do a better job explaining the

9:10

things I don't understand when it

9:11

responds. Now that it knows where my

9:13

knowledge is, it knows what I do and

9:15

don't have to care about when it

9:17

responds. I want you to do a thorough

9:19

audit of both Claude Code's behavior and

9:22

how we are implementing that behavior.

9:24

This is the clear ask. I'm telling it

9:25

exactly what I want it to do. Before I

9:28

said I want two things. This is my

9:31

ultimate goals for the thread. This end

9:33

is saying what I want this thread to end

9:34

up at. But now I'm saying I don't want

9:37

you to do that. I want you to do a

9:39

thorough audit of these things that I'm

9:42

not sure about and I know that's where

9:44

the problem lives because I know how the

9:45

codebase works. If you see a simple fix

9:48

that we can apply to solve the problem,

9:50

stop and let me know so we can apply it

9:52

ASAP. This is me giving the model

9:54

permission to at any given point if it

9:56

finds the solution and it has four other

9:59

sub aents going exploring other things,

10:01

it can confidently stop and just tell me

10:03

what it found instead of going forever

10:05

for option one of 17 to be chosen.

10:08

Anyways, come back when you have a

10:09

confident solution to the problem with a

10:10

good experience for our users. I'll say

10:12

confident path to a solution so it

10:14

doesn't possibly interpret that as

10:16

meaning write the code. I think I've

10:18

made it pretty clear here that I don't

10:19

want it writing code, but fable is

10:21

fable. If you don't say something

10:22

explicitly, it will do whatever it

10:24

wants. And I'm curious what it ends up

10:25

doing. So, also going to switch to full

10:27

access because I don't feel like

10:28

waiting. And I'll bump extra high

10:30

because why not? I've given it easy

10:32

outs. And now this is running. I'm going

10:34

to show you guys what's arguably the

10:35

most important step of landing a lot of

10:36

code. Ignoring the thread until it's

10:38

done. If you spend all of your time

10:41

sitting and watching threads, waiting

10:43

for them to have an answer, you're not

10:45

being productive. It feels productive

10:47

because you see changes happening on

10:49

your machine for something you're

10:50

responsible for. But that thread's not

10:52

going to complete any faster if you keep

10:54

it open. And 99% of the time, you're not

10:56

going to see something going on in the

10:57

thread that you really want to stop. So

10:59

just go do something else. I also see

11:02

chat pointing out a real problem. And

11:04

this is a problem that pissed me off so

11:05

much that I spent weeks trying to solve

11:07

it. I start too many threads and I get

11:09

lost sometimes. I promise you we'll be

11:12

touching on this a lot throughout.

11:13

Another thing somebody did during the

11:15

stream is they linked this PR asking for

11:17

me to merge it so I can have 51 PRs

11:19

instead of 50. I have a feeling this PR

11:22

is not going to be mergeable for a bunch

11:23

of reasons. This one's also going to be

11:25

a bit hard for me to test because I'm

11:26

not using codeex or cloud code with the

11:28

normal O anymore. I'm using these

11:30

through CLI proxy. So, the usage limits

11:32

aren't even exposed. So, I won't even

11:34

know if this is working. And I'm going

11:36

to be real here. One of the things I

11:38

optimize for is preventing loss of

11:41

motivation. Let's say hypothetically I

11:44

thought there was a really good chance

11:45

this PR would work, but I have to be

11:47

able to test it to know. So, I put a

11:49

bunch of effort into either spinning up

11:51

another box with normal off or I remove

11:54

all the CLI proxy stuff from this

11:55

computer to switch over to normal codeex

11:57

and cloud off. I pull down the PR, I

11:59

build, I launch, I go try it, and it's

12:03

broken anyways in obvious ways. I would

12:05

not be happy. That would massively

12:08

impact my motivation to keep working

12:09

that day. And I'm much more likely to

12:11

alt tab to Twitter or to leave to go

12:14

grab a like soda out of the fridge or

12:15

something. and now I have lost all of

12:17

the conducts in my head of what work I

12:19

was doing. So you need to do whatever

12:21

you can to avoid those demotivating

12:23

moments. One of the best things you can

12:25

do is reduce the likelihood that the bad

12:27

outcome happens. In this case, the bad

12:29

outcome is I put a lot of work in. I try

12:31

the code and it fails. One of the

12:34

easiest ways that you can prevent these

12:35

failures is burning more tokens. Into my

12:38

composer it goes. I drop the link to the

12:40

PR and I'm going to tell it what I want

12:41

it to do. This pull request adds a

12:43

feature that a lot of users are asking

12:45

for. Unfortunately, I don't use normal

12:48

O, so I can't test it myself. Before I

12:50

take the time to set up an environment

12:52

to test this, I want you to do a

12:54

thorough audit of the change. Find any

12:56

potential failures, obvious issues, and

12:59

things that could negatively affect

13:00

users if we were to merge it today. My

13:02

immediate areas of concern are the

13:04

frequency in which we are using these

13:08

API calls. I don't want to be spamming

13:11

the APIs in a way that would potentially

13:13

get users banned. I also want to make

13:15

sure that this data is fetched reliably

13:17

and accurately in a way that won't

13:20

confuse users if they see different

13:21

numbers in a dashboard than they see in

13:23

our product. I'm also curious how our

13:25

implementation compares to other things

13:26

that have it implemented. I know apps

13:28

like Codex Bar have an implementation of

13:30

this, for example. I want you to audit

13:32

the implementation, find all of the

13:34

issues that might exist, answer these

13:36

particular areas of concern, and explore

13:39

other open source projects that have

13:41

similar features so that we can get a

13:42

good idea of how our implementation

13:44

stacks up. Okay, Whisper Flow the

13:46

formatting of this pretty bad here, but

13:49

honestly, I don't care. The models are

13:50

good enough to turn slop voice detects

13:52

into the actual stuff that we want.

13:54

Sent, I also again see concerns in chat.

13:57

Multi-agent workflows are going to be

13:59

brutal on any Mac you pick. Again, I'm

14:02

running these on BB-1. I have a lot of

14:04

work running on this machine. I have

14:06

other separate things running in the

14:08

background, too. I'm using 5% or less of

14:11

my CPU. A few of the threads are getting

14:14

a little bit of work on them, but the

14:16

majority aren't getting jack And

14:18

this is with multiple threads in T3 code

14:21

right now with lots of sub aents in all

14:22

of them. on top of the other background

14:24

work I'm running here. I've had points

14:27

where on this machine I was running 40

14:29

plus agents and it wasn't breaking a

14:30

sweat. And it's not even cuz this

14:32

computer is super powerful. Obviously 32

14:33

cores is a lot. I got a 16th thread

14:36

machine that I paid like 600 bucks for

14:38

in the other room that also has no

14:40

problems at all and would be at 12%

14:42

instead of six for this workload. It's

14:45

really solid. And this is because I'm

14:46

running Linux, not Mac OS. Mac OS has a

14:50

ton of problems that make it really hard

14:51

to reliably parallelize your work to the

14:54

point where I just don't like doing it

14:57

on Mac OS anymore. Generally speaking, I

14:59

treat my Macs as one or two tasks at a

15:01

time and I treat my Linux boxes as

15:04

effectively unlimited tasks at a time

15:06

because I've never managed to saturate

15:08

unless the tasks are running things that

15:11

are super heavy like they're running

15:13

unbounded Rust compiles that use all my

15:15

RAM and stuff like that. But you can

15:17

take any old laptop or desktop that's

15:19

sitting around, throw Abuntu on it, and

15:21

have a much better experience with lots

15:23

of agents in parallel. Probably one of

15:25

the biggest hacks I have found to making

15:26

myself more productive, just moving over

15:28

to Linux for my dev work has been an

15:31

exponential improvement to my

15:32

productivity. So now we have two threads

15:34

going and these are both ones that'll

15:36

take a while. Both because the task I

15:38

gave them was expansive, but also

15:40

because it's cloud code running on XI.

15:43

So these are going to be brutal. So

15:44

let's do step three.

15:46

of how I'm landing so much. As you can

15:48

guess, a lot of these things result in a

15:51

lot of code being put up in PRs. But

15:53

keeping track of that all, okay, I'll be

15:55

frank here. It's impossible. The amount

15:57

of code I'm shipping means that I don't

15:59

know what PRs are open or closed of mine

16:02

any given time. I just I can't know

16:04

anymore. So, how do I deal with that? If

16:06

you guessed burning more tokens, you're

16:08

starting to catch on. I'm going to swap

16:10

over to GLM53 Flash because it's

16:13

genuinely a really impressive model,

16:15

especially at its price. I'm just using

16:16

it in Codex. Doesn't really matter where

16:17

you use it, but it's good at stuff like

16:19

what I'm about to do. I have a bunch of

16:21

PRs open in this repo and I've kind of

16:23

lost track of them. I want you to go

16:25

through all of them and help me

16:26

prioritize them. Which ones are ready to

16:28

merge? Which ones should probably be

16:30

closed? Which ones need another pass

16:32

before they're safe to merge? Use sub

16:34

agents to break up the work and come

16:35

back to me when you have a good idea of

16:37

what I should be closing, merging, etc.

16:39

Prioritize based on the ease of action

16:41

so I have easy things to merge on top.

16:43

This prompt might seem weird because I

16:44

gave this question dump at the end. I

16:46

find these are actually very useful for

16:48

the model because it gives it a better

16:49

idea of what my goal is. What do I

16:51

actually want to learn from the work

16:53

it's about to do? This is also one of

16:55

those tasks that will take a bit even on

16:57

a fast model like 53 flash. But since

16:59

five free flash is surprisingly capable

17:01

and hilariously cheap, this will cost me

17:03

nothing. Obviously, if I did it with

17:05

Luna instead, it would also effectively

17:07

cost nothing because I have so much

17:08

usage available. But I like five free

17:10

flash, so why not? I'll try it with

17:11

this. And just cuz also, why not? I'm

17:14

going to paste the same thing. I'm going

17:16

to switch over to Luna and I'll bump it

17:18

to fast on I'll do high fast. Why not?

17:21

Because again, Luna uses basically

17:23

nothing. So now I have two threads with

17:26

different models, which is another hack

17:28

we'll talk about later, auditing my work

17:30

to see what it thinks I should be

17:32

prioritizing. Right now, while these are

17:34

running, I want to show you guys a few

17:36

more of my how I keep track of my work

17:38

tricks. One of the things I've really

17:40

liked in T3 Code recently is how we

17:43

integrate and relate a PR to a thread in

17:46

your sidebar. You get this little button

17:48

here that shows the PR that this thread

17:50

is associated with. Usually the PR that

17:52

it opened. And you can click it to see

17:54

that PR in editor. But since I'm a

17:56

little constrained on screen real estate

17:58

here, I'm going to commandclick instead

18:00

to open it up in my browser instead. Oh,

18:03

this is actually a really good PR to

18:04

have here because it explains some of

18:05

the things I've been doing to make my

18:06

flows easier. This PR is directly linked

18:09

to this thread and that means when I

18:11

merge this PR, this thread will

18:13

disappear. This seems totally fine. I

18:16

know the consequences of this PR. I will

18:17

come back to it later to explain why I

18:19

did it. But for now, squash and merge.

18:22

Now that it's merged, and now the thread

18:24

is gone from the sidebar. I built this

18:27

settled flow for T3 code because I

18:30

wanted to make it really clear what work

18:32

needs more effort and what work doesn't

18:35

anymore. If you want to go back to the

18:37

thread, you totally can. You can

18:38

unsettle. If this ruins your workflows,

18:40

it's totally fine. You can go turn it

18:41

off in settings. But the goal I had here

18:44

is that if you have it in your sidebar,

18:46

it's because there's more work to do. On

18:49

that note, I have things here that I

18:51

don't really need in here anymore. Most

18:53

of them were me testing things when I

18:54

was setting up for stream earlier. So,

18:57

I'm going to settle settle settle.

19:00

Validate PR closure candidates. Settle.

19:03

This one actually I know what this one

19:04

is and there are things in there I want

19:06

to deal with. So, I will leave that

19:07

open. But if I don't want to deal with

19:08

this now, I added a feature for this

19:11

snooze. I can snooze this for in 3 hours

19:14

and now this won't come back until 9:36

19:17

p.m. This makes it really easy to keep

19:19

track of the stuff you're actually doing

19:21

and get rid of things that no longer

19:23

matter. Generally speaking, the only

19:25

reason you should go back to an old

19:26

thread is because you need the context

19:28

to fix something else. And even then,

19:30

probably don't need it that often. If

19:32

the model could build the context

19:33

initially, it can do it again. So now we

19:35

have three threads running, none of

19:37

which are making changes, all of which

19:39

are investigating things and helping me

19:41

make better decisions around existing

19:43

stuff. This one finished though, so

19:44

let's take a quick look. I have a

19:46

competent path and it's simpler than

19:47

expected. The audit's done. I verified

19:49

Cloud Code's real behavior. Cool. This

19:51

is the one for fixing the skill bug.

19:53

There are apparently three separate

19:54

defects that are stacking up. Discovery

19:56

is blind. It only reads name and

19:58

description from the front matter, and

19:59

it hardcodes enabled true. It ignores

20:01

disabled model invocation, user

20:03

invocable, and skill overrides from

20:04

settings. Apparently, the dollar sign is

20:06

codec syntax, and we're currently

20:07

sending it to Claude untransated. It's a

20:10

good thing I had it do this audit. They

20:11

just learned something about that we're

20:13

doing wrong here as part of it.

20:14

Apparently, the slash only expansit

20:16

message start at our menu offers it

20:18

anywhere regardless. I will admit it

20:20

might be my ADHD, but after the problem

20:24

section, my eyes kind of are glazing

20:27

over the fix. So, I could just try to

20:30

sit there and force myself to focus and

20:31

understand it. But remember the theme,

20:34

use tokens to reduce stress and

20:37

likelihood that you decide to go do

20:38

something else. I found myself with the

20:40

temptation to tab out and go do

20:43

something else here, but I have to fight

20:44

that and I'm going to fight it with

20:46

tokens. Watch how I do it. I really like

20:48

your description of the problems here. I

20:50

feel like I understand the issue well

20:51

now. I find your solution hard to parse

20:54

and I can't tell which parts of the

20:56

problem you're actually solving. Can you

20:58

give me a simpler, easy to digest,

21:01

explain like I'm five description of how

21:03

you plan to fix these problems? And now

21:05

I don't have to let the ADHD win. In

21:07

fact, I can guilt-free move to this

21:10

thread that just finished the work it

21:12

was doing. I also just noticed another

21:14

bug, which is that this thread didn't

21:16

mark itself as done properly. So, I'm

21:18

going to ask about that quick, too. I

21:20

noticed a new issue in T3 code just now

21:23

coming from the remote connection to the

21:25

machine that this prompt is running on.

21:27

I noticed that some threads when they

21:29

are finished and done with some work are

21:31

not correctly marking the thread as

21:33

done. I have no idea what the cause of

21:35

this could be. I also just noticed that

21:38

I disconnected from the remote in the

21:40

middle of writing this prompt. I'd like

21:41

you to investigate what's going on on

21:43

this machine. What might have caused the

21:45

done status to not appear? And what

21:47

caused the disconnect that I just

21:49

noticed? So now I have a rough prompt of

21:51

what issues I'm experiencing that I

21:53

wanted to explore. Generally speaking, I

21:55

prefer soul for exploring things on the

21:58

machine and its history and challenges

22:00

it's run into. I don't need fast for

22:02

this because again, I'm just letting

22:04

these things run in the background. So,

22:05

I'll send it off to go explore the

22:06

issues that I experienced right now.

22:08

This is another thing that I found helps

22:10

both with the quality of experience for

22:12

our users, but also with bumping up my

22:13

PR numbers. I have made it so

22:15

frictionless to go spin up a thread

22:18

whenever I notice an issue that I close

22:21

issues super fast and I force myself at

22:24

all times when I notice an issue like

22:26

this to go address it immediately

22:28

because otherwise it'll never happen.

22:30

This other thread though is auditing the

22:31

provider usage dashboard is completed

22:33

now too. PR8327 audit subscription limit

22:36

meters good bones hold before merge

22:39

architecture is right for T3 CI is green

22:41

every bot find except one is fixed at

22:43

the head but it has no 429 hygiene it

22:46

pulls the cloud endpoint faster than the

22:47

community accepted floor it fabricates

22:49

an unlimited window that the API never

22:51

reports and it ignores free local data

22:53

sources that other tools use to avoid

22:55

network calls entirely. That's a bunch

22:58

of really good insights. I like that

23:00

it's calling out the 429 risk and it

23:02

successfully found issues people have

23:04

opened on Cloud Code itself. Not the

23:06

open source repo for Cloud Code because

23:07

it's closed source, but on the repo that

23:09

they put their skills and let the people

23:10

mark issues on. There's a bunch of

23:12

people who reported issues where they

23:13

can't check their usage limits sometimes

23:15

for 30 plus minutes. I've had this

23:17

happen a few times myself. It is really

23:18

annoying and I'm happy the model found

23:20

it and recognize it is a real risk that

23:22

exists the way we have this set up. We

23:24

are apparently checking every 60 seconds

23:25

which is way too aggressive. The settled

23:28

floor that people agree on in the

23:30

community, people building things like

23:31

this is closer to 180 seconds. Once

23:34

again, I am faced with some issues.

23:36

There's a bunch of concerns here.

23:38

There's three core ones, and they're all

23:40

big and very detailed, but there is just

23:43

so much info here that I don't feel like

23:46

parsing. So, I'm going to ask it to do

23:48

something else. This is fantastic

23:50

research you've done. I want to leave a

23:52

useful comment for the user who sorry

23:55

for the contributor who put up this poll

23:57

request. Help me draft a good comment to

24:01

leave for this user with the core

24:03

insights shared here to make it easier

24:06

for this contributor to fix the problems

24:08

and make the PR ready to merge. I don't

24:10

want it to leave the comments yet. I

24:12

want the comments to both help me feel

24:14

more informed and if it helps me, it'll

24:16

help the contributor as well. So, I'm

24:17

going to tell it to do the same here as

24:18

well. Share your simple draft with me

24:20

here so that I can approve it before the

24:23

comment is left. Cool. This is now doing

24:25

its job and the one below has given me a

24:28

simpler explanation to what it was

24:30

describing. Simplify the problems. The

24:32

dollar menu shows skills that are broken

24:34

or turned off. And when you pick a

24:35

dollar sign skill, Claude never gets a

24:37

real instruction to run it. Claude only

24:38

forces a skill run if you use it with a

24:40

slash at the start. The fix the

24:42

translation step right before we hand

24:44

the message to Claude. And now that I'm

24:46

reading this, I have a much better

24:47

understanding of the problem and the

24:49

risks with this PR. Hey, what I'm left

24:51

with is more questions. So, I'm just

24:52

going to ask them. So, if my

24:53

understanding is correct, only SLK

24:56

skills at the front are applied. That

24:58

doesn't seem ideal. I would like for us

25:01

to make it very clear where skills are

25:03

being applied as well as what

25:04

restrictions claude code is applying to

25:06

us. The rough idea for this that I have

25:09

is if you do a slash command, we

25:12

indicate after the second one that that

25:14

command cannot be moved to the front and

25:17

applied the way that cla code expects

25:19

because cloud code can only show one

25:22

command at the front. Is this the right

25:24

solution? Do you have other better ideas

25:26

on how we get this UX right? I just want

25:28

to make sure users aren't confused by a

25:31

weird behavior that is cloud code

25:32

specific. Ideally, we can make cloud

25:35

code behave nearly identical to how

25:37

Codeex does. I have given it my

25:39

additional questions and thoughts. It

25:40

will give me more info. I command minus

25:42

once to make the UI a little smaller so

25:43

it fits better on my screen. And I

25:45

notice this guy is done. Now, let's see

25:47

the comment it left. I also built skills

25:49

on my machine for how I like comments to

25:52

be left by my agents. And it used the

25:54

skill here saying Cloud Fable 5 is

25:56

responding on behalf of Theo. Awesome.

25:58

Because the next step is going to need

25:59

that. Thanks for this. The shape is

26:01

right. Probe only on usage, page loads,

26:03

cache server side, degrade to no meters

26:05

on failure. We compared against Codex RC

26:07

usage, yada yada yada. Three things need

26:09

to change before merge and a few

26:10

follow-ups are worth tracking. And here

26:12

it says the must fixes and exactly what

26:14

those things are and why worth doing

26:17

your call whether here or in follow-ups

26:19

that you already offered. I don't love

26:21

that rate li that we're already

26:24

scanning. Okay, this part is just wrong.

26:26

So I'm going to tell it to not do that.

26:28

I have a pro tip that helps me a lot but

26:30

sadly won't help here again because my

26:32

setup is different. When I see an

26:34

assumption that I'm not sure about that

26:35

the model made, I'll ask it to audit

26:38

against my own history. Super useful

26:40

because I'm building on top of cloud

26:42

code with T3 code, but I'm also working

26:44

on cloud code with T3 code. So, it

26:46

having access to its own history on its

26:48

machine that it can check and verify its

26:50

assumptions is so helpful and has

26:52

prevented a ton of bugs. But I don't

26:54

have the data on this machine because my

26:55

O isn't going directly through cloud

26:57

code or codeex. It's going through my

26:58

CLI proxy. So it won't have the data it

27:00

needs to compare here. So I'm just going

27:02

to tell it what I know happens to be the

27:04

case. Some quick notes that I have here.

27:06

One, the SDK response probably doesn't

27:09

include 7-day opus or sauna anymore

27:11

because those models don't have separate

27:12

limits. It does include the 7-day fable

27:15

limit though, and we definitely want

27:17

that in ASAP. I would block this PR on

27:21

not including it. Second, codeex's rate

27:24

limits being written is useful, but

27:27

those might be stale if you're also

27:28

using codeex other places, too. I would

27:31

really like to not have to make an API

27:32

call, but I don't want to show bad data

27:35

by pulling from the cache unless we are

27:38

confidently showing what is accurate

27:41

data. I trust your judgment on this one,

27:43

but update your suggestions accordingly.

27:45

I think these changes are simple enough

27:46

that I trust the model to apply them

27:49

correctly to the comment. And also this

27:50

particular case, the contributor is in

27:52

my chat watching so he knows what my

27:54

intent is. So I'm just going to do the

27:56

lazy thing here, which is tell it after

27:58

you make these changes to your draft,

27:59

leave the comment on my behalf with the

28:01

same formatting that you have already

28:03

used. Tada. I don't have to worry about

28:05

this anymore. In an ideal world, I would

28:09

be able to set something up in T3 code

28:12

where after it finishes this, it auto

28:14

settles because I don't care about this

28:16

threat anymore. This now has all of my

28:19

concerns addressed. But let's say I did

28:22

want to leave this open because I wanted

28:24

to use it to check in on this PR later.

28:27

This is where one of my small little

28:28

hacks has been very useful for me. I

28:31

have been building T3 code to make these

28:33

workflows way easier. And I mentioned

28:35

already that I have things set up so

28:36

that when the PR merges, this auto

28:39

disappears. There's a problem though. I

28:41

didn't open this PR in this thread. So

28:44

the PR isn't linked. I could do some

28:46

crazy stuff to intelligently include it,

28:49

but the lazy option is often the best

28:51

one. Instead of burning tokens on every

28:53

thread, I burnt tokens on one thread. So

28:55

that now I can rightclick a link to a PR

28:59

and click link to thread. Now this PR is

29:02

attached to this thread, which means

29:04

this PR will auto settle when the PR

29:08

merges. So nice. And the chatter just

29:11

mentioned that he will have things fixed

29:13

tonight or early tomorrow. And I trust

29:16

him. So I'm gonna open this up quick

29:18

because I want to be able to look at it.

29:19

But I'm also going to snooze this until

29:21

tomorrow because it doesn't matter

29:23

anymore. Awesome. And here we can see

29:25

the comment it left. Note Cloud Fable

29:27

was responding on Theo's behalf. This is

29:30

exactly what I wanted to hear. Awesome.

29:34

This is great. I am much happier now.

29:36

One more quick note on letting the model

29:38

like interact with GitHub on your

29:40

behalf. I have found my babysitting

29:42

skill to quickly become one of the most

29:44

useful things I've introduced to my

29:46

workflows. I think pretty much every

29:48

code project benefits from having an AI

29:51

code review bot on poll requests. I

29:53

genuinely really like it. That said, I

29:56

found myself often in the same scenario

29:58

where I would see a PR complete from a

30:01

thread in any agentic tool. I would go

30:03

over, I would see a bunch of comments,

30:05

and I would copy paste the ones I agreed

30:07

with back to the thread and say, "Fix

30:09

these." This was really inefficient and

30:11

obnoxious, so I made a skill to do it

30:13

for me instead. The babysit skill is

30:15

actually quite simple. It tells the

30:17

agent, "Hey, this PR probably has

30:20

comments from automated reviewers. I

30:22

want you to keep an eye on it. Take a

30:24

look every time automated review

30:26

comments come in and decide if they're

30:27

worth addressing. If they are, make the

30:30

changes, push them, and keep monitoring

30:32

the PR to see if the agents resolve

30:34

their comments. This one little skill is

30:37

a super simple, maybe one and a half

30:40

paragraph pile of text that creates a

30:43

loop. The loop is the agent makes the

30:46

changes, files the PR, we have all of

30:48

our automated review bots giving

30:50

feedback, and this agent will now

30:51

autonomously address the feedback and

30:53

keep improving the PR until none of

30:55

those review bots have anything else to

30:57

say. at which point it will finally go

30:59

from working to done. And I click it and

31:03

it hasn't just made the one first pass

31:05

on the changes. It made that first pass.

31:07

It got 12 comments. It addressed all of

31:10

them. It got four more. It addressed

31:12

those. It got one more. It addressed

31:13

that. Now it's approved by those AI

31:15

review bots. All of those layers could

31:17

have been more back and forth between me

31:19

and the agents doing the review and my

31:21

agent writing the code. But instead, it

31:23

all happens by itself and I'm not pulled

31:26

in until it's done. I love it. Cool.

31:29

This is no longer my problem. I can go

31:30

back to the other things. It looks like

31:31

the two PR prioritization threads

31:33

finished. Let's take a look at these.

31:35

Oh, sorry. This one wasn't the PR audit

31:37

finishing. This was the audit for the

31:39

bug that I dealt with. I don't feel like

31:41

I can give great advice fixing that

31:42

right now, but I will in a bit. For now,

31:44

I want to hop over to the PR audit that

31:47

Luna on Highfast finished. It chose to

31:50

put it in an HTML plan. I think I had

31:53

asked it to do that enough times before

31:54

that it decided to save that in memory

31:56

at some point. I didn't think it had

31:57

memory. I did not expect it to do that.

31:59

Here is what it made with Luna going

32:02

through all of these things. It said

32:04

that my PR raising the T3 code device

32:06

limit to five is ready to go. It is

32:08

ready, but due to issues with Cloudflare

32:11

that will hopefully be resolved by end

32:12

of week, I am not confident in doing

32:14

that. Cloudflare, please get your

32:16

together. Or use compressed native

32:18

websocket on iOS. This is not a PR that

32:21

is as simple to merge as it seems to

32:22

think because this one makes a lot of

32:24

native changes. I had to rewrite the

32:25

network layer in Swift. This is a bad

32:28

recommendation.

32:29

I do not like Luna for this type of

32:34

work. I am going to archive this because

32:36

I don't trust it enough and I just don't

32:39

even want it in my history because it'll

32:40

confuse me having that there when it's

32:42

not the one I want to use. 53 Flash is

32:44

doing a much better job. It spun up four

32:46

sub agents to break apart the PRs and

32:48

now it's doing a follow-up run with the

32:49

things that it No, it's initialized

32:52

without starting the audits. Oh, did it

32:54

hit a bug? Whatever. It'll probably

32:56

figure itself out. I'll let it do its

32:57

thing. Back to the enable skills

32:59

anywhere in composer thread. I had asked

33:01

it a question trying to figure out what

33:03

is possible here. It calls out that I'm

33:05

missing a piece of the plan with the

33:06

translation layer. The front of message

33:08

rule stops applying to dollar sign

33:09

skills entirely. We relocate the

33:11

invocation on the wire. So a dollar sign

33:13

skill chip anywhere in your message runs

33:16

for real. The front only restriction

33:17

only remains true for raw slash

33:20

commands. There's also a cloud code

33:21

feature I haven't verified yet that

33:22

could make multiskll messages fully

33:24

native skill stacking like slash a then

33:26

slb args loads both. The docs claim it.

33:29

My earlier probe didn't test the exact

33:31

form. Let me verify it now because it

33:33

decides whether we really need any

33:35

warning UX at all. Verified stacking

33:38

does not work in SDK mode on 2.1.237.

33:42

It looks like there's a real gap between

33:44

what Anthropic is reporting is possible

33:47

and what is actually allowed in terms of

33:50

the multiple skills invocating at the

33:53

start. Can you hunt through open issues

33:55

on cloud code and see if others are

33:57

reporting this? It'd be really nice if

33:58

we could call it out directly and try

34:00

and get them to fix it instead of having

34:03

to architect something crazy in our app

34:05

directly. And now I sent it off to go

34:07

figure out if Anthropic has already

34:09

gotten reports of this behavior and

34:12

gap between the docs and the actual

34:14

capabilities. I do love that even

34:16

Anthropic models know that Anthropic's

34:18

docs are utter full of

34:20

lies. The main argument for open

34:23

sourcing cloud code is that their docs

34:25

are so and they should

34:26

never make us read them because now I

34:28

have two layers of obuscation I have to

34:30

fight through when integrating cloud

34:31

code. I guess three really. There is the

34:34

super vague things that are said

34:36

publicly places like Twitter. There is

34:38

the docs which are full of lies. And

34:39

there's the source code which is

34:41

obuscated and uglified so it's hard to

34:42

actually dig into. Even the SDK is

34:45

closed source. The Python one isn't but

34:46

the JavaScript one is which is the one

34:47

that matters. I'm going insane. It

34:50

managed to find the issue for this and

34:52

Boris commented in the thread and

34:54

confirmed that it is a real bug. So now

34:57

I want your guys opinion chat. It

34:59

offered to post this comment for me. And

35:02

I have three options here. Option one, I

35:05

copy paste the comment and then leave it

35:08

in the PR directly. So it looks like

35:10

it's from me, but Fable wrote it. Option

35:12

two, I can go write a real better

35:14

comment, which is the the correct option

35:15

to be clear. But option three unique to

35:18

this particular scenario since this is

35:21

an issue that I have with claude code

35:24

and I know that the cloud code team is

35:27

pretty cloudp. I think letting the agent

35:30

leave the comment knowing that it's

35:32

going to specify that this comment was

35:34

left by Fable 5. I think it's funny to

35:36

let Fable leave the comment. Am I right?

35:38

I don't even need to see chat. I know

35:39

I'm right on this. You have my

35:41

permission to leave the comment. And

35:43

look at that comment has been left.

35:45

Cool.

35:46

So again, with the staying productive

35:49

thing, I know they're going to take a

35:50

bit on this one. So I'm going to snooze

35:52

this to next week. And if they haven't

35:54

solved it by next week, I'm going to

35:56

start bugging my contacts to get them to

35:58

try and fix it because this is stupid. I

36:00

really optimize for keeping my thread

36:02

list as minimal as possible. Even now, I

36:05

only have like 1, two, three, four,

36:07

five, six, seven threads here. Two are

36:10

pinned longunning ones. My Swift iOS

36:12

app, which I rebuilt T3 code in Swift UI

36:15

from scratch for fun, has gone way way

36:18

longer than I expected, but I also had

36:20

fun testing the limits of like how much

36:22

code can you make happen and how big of

36:25

an app can you build in a single thread?

36:28

And the answer's been a lot. I have

36:30

built the whole app with 95% of the code

36:33

in just this one thread with 56 soul on

36:36

a MacBook remotely with no issues. It's

36:38

been very cool. I'm like at

36:40

least a hundred prompts into this

36:42

probably. This one can't merge though

36:44

because I haven't gotten Julius's

36:45

permission. So, it just sits here pinned

36:46

forever. Obviously, there's a lot of

36:48

things that are relatively easy to be

36:49

like, "Oh, yeah, that makes sense. I hit

36:51

merge. Good to go." But there are a few

36:54

layers that I think are useful here from

36:57

what merge means to how I test things

37:00

before I merge to how I have exposed

37:02

this functionality so others can copy a

37:04

lot of it too. One of the most important

37:06

things you can do is make sure you have

37:07

everything in place to make it easy to

37:09

test code that you want to validate

37:11

before you merge it. This is a big

37:13

change that overhauls all of the file

37:15

upload processes in T3 code. So I want

37:18

to try it out. There is a problem here

37:20

though. This thread is on a different

37:21

machine that is remote. I am connected

37:23

over tail scale but I can't really do

37:26

much here other than like open a

37:27

terminal or use the inapp preview

37:30

browser thing which isn't really my

37:32

favorite thing. It's not going to solve

37:33

my problems here. So, I needed a way to

37:35

test this remotely on my computer. So, I

37:38

put what was probably far too much time

37:41

and token burn into adding a builtin

37:44

tail scale share dev command. Let me

37:46

demonstrate. I want to test these

37:48

changes out quick. I'm on a remote

37:50

machine. Can you use the d-share dev

37:53

command with tail scale so that I can

37:54

try it out remotely? Respond with a URL

37:56

that has the pairing code in it. So, it

37:58

has the PR checked out. Now, it's

38:00

starting in the dev server. Oh, that was

38:02

quick. I had to overhaul how bundling

38:04

worked to make this viable at all,

38:05

especially over slow networks because at

38:08

my 10 megabit per second hotel Wi-Fi,

38:10

loading the dev server took like 20 to

38:13

30 minutes. So now I have this PR from

38:17

that machine on a dedicated port

38:19

running. So now I can open this and test

38:22

it out in my browser for real. I have

38:24

some files here that are pretty images.

38:27

So let's drag and drop one. What is the

38:29

file that I've attached here? How do you

38:32

have access to it? And now it is

38:33

running. And we shall see in just a

38:35

moment. Oh, look at that. It accessed

38:38

the data correctly. One of the things I

38:40

did for this upload change is whenever

38:42

you upload a file, it puts it in a user

38:44

data directory that the file path is

38:47

shared with the model. So it can use

38:48

whatever tools it wants to go read the

38:51

file. And it worked perfectly. I now

38:54

know that this code functions. I might

38:57

not have known that before. I do have

38:58

concerns that it might break

38:59

screenshots. So, let's do a screenshot

39:01

quick. Paste. How about this? What is

39:04

this file? What are the contents? It's a

39:06

PNG screenshot of the T3 code app

39:08

showing this exact conversation. Access

39:10

works differently for images. The file

39:11

was saved to the same attachments

39:12

directory, but I did not need to read

39:14

it. The harness rendered the image

39:15

directly in your message. So, I saw it

39:17

pixels in line. The path is there, too,

39:19

if I ever needed the raw bytes. Awesome.

39:21

All the concerns I had with this change

39:23

are addressed. Hypothetically, I could

39:25

just merge it. But I do have another

39:27

thread that's been auditing the changes

39:28

that thinks I should break it up more.

39:29

So, I'm letting that happen. Although,

39:31

god damn, I do really wish I could merge

39:32

this right now. How cool is that,

39:34

though, that I can just ask in the

39:36

thread for it to spin up the server so I

39:37

can try it and then try it and have way

39:40

higher confidence or lower confidence in

39:41

the right places that this code actually

39:43

behaves. There are some changes that

39:45

just cannot be tested in a browser

39:47

though. And I have accepted this and put

39:50

a lot of work into figuring out how to

39:53

work around that fact. For mobile, I did

39:55

some research and I found this project

39:57

Squim. Thank you to the people on

39:58

Twitter who told me about it. That makes

40:00

it relatively easy to access a mobile

40:03

app built on a Mac remotely where it

40:06

will build it and bundle it in a way

40:07

that you can install it through their

40:08

web app relatively trivially. It has

40:10

made it much easier for me to do a

40:12

remote build and then get a link that I

40:14

can click on my phone and install so

40:16

that I can actually test the changes

40:17

locally. Super useful. Not the best

40:20

solution. There's a couple edge cases. I

40:22

love they call it that you don't need a

40:23

VPN or tail scale. Tail scale remote iOS

40:26

builds are obnoxious but can be done.

40:28

This is much smoother but you don't get

40:30

all of the granular permissions that you

40:32

can on iOS normally. Like it restricts

40:34

share and airdrop and things because

40:36

it's not a fully signed build the same

40:39

way. So, I've now solved for web builds

40:42

because I can just access it remotely

40:43

and have solved for iOS builds well

40:45

enough to get some useful stuff out of

40:48

it. It doesn't have everything, but it's

40:50

more than enough when I'm like on the go

40:51

to test a change quick. But what about

40:54

the desktop app? I was admittedly lazy

40:56

about this one for a while where I just

40:58

didn't check desktop only changes

41:01

because honestly most of them were the

41:03

same way in web. But once we started

41:05

running into more and more issues with

41:06

weird off redirect edge cases, I was

41:09

tired of merging, waiting for a nightly,

41:11

checking it, and then realizing it was

41:13

broken. So I wanted a better way to test

41:15

those things. So I gave myself one. I

41:18

landed a pile of PRs that made this way

41:21

easier. The first one I had was a clever

41:23

fix I came up with, which was the

41:25

ability to trigger a preview build for

41:27

Mac OS with a label. So what this

41:29

enables is I add the label preview col

41:32

Mac and then after some amount of time

41:34

passes a Mac OS preview DMG download

41:38

appears in the thread that I can click

41:39

on and get the file and then go test it

41:42

myself. This has made it so much easier

41:44

to test changes that are desktop appsp

41:46

specific without having to like build

41:48

the whole thing locally. I mostly built

41:50

this because I have other machines that

41:51

I do these tests on. I wanted to make

41:53

sure that on like a vanilla MacBook

41:55

setting up off would behave as expected.

41:57

So, I had this old MacBook Air from an

41:59

ex employee that was pretty much nuked

42:01

and wiped. It's become the house Mac. We

42:03

use it for like running our TV

42:05

downstairs and stuff. I uninstalled

42:07

everything other than cloud code and

42:08

codecs. I cleared all T3 code history on

42:10

it. I downloaded this and made sure it

42:13

worked. But I hit a problem. I couldn't

42:16

download it on that machine because I

42:18

wasn't signing into my GitHub on that

42:19

machine. So, I did what I always do. I

42:22

burned more tokens. I added a feature in

42:24

the T3 code repo where now those

42:26

downloads that are made with that

42:28

preview label do not require you to be

42:30

signed in on GitHub and off as a core

42:33

contributor to the project which was a

42:34

sane default it added but didn't make

42:37

sense for my use case. So I made those

42:39

two PRs in order to make it way easier

42:41

for me to test on other machines and

42:42

it's like legitimate infrastructure.

42:44

It's not super complex as it's reusing a

42:46

lot of the stuff that already existed

42:48

inside of the repo for doing real

42:50

release builds, but this is still like a

42:53

couple hundred lines of code for the

42:54

build and another couple hundred lines

42:56

to make it accessible without downloads.

42:58

But I still wasn't satisfied. It was

43:00

slower than I wanted. The builds took

43:02

too long and it didn't matter before for

43:04

releases because Windows builds take 8

43:06

minutes. So Mac OS builds taking six

43:08

doesn't matter because they're happening

43:09

in parallel anyways. But now it does.

43:12

So, I did yet another thread where I

43:14

cleaned up the way that we were handling

43:15

signing to cut the build times by

43:18

meaningful amounts. It's not the 81% it

43:21

says here. This is the number of signing

43:22

calls, but the overall build time

43:23

dropped by like a minute and a half if I

43:25

recall. I know these things probably

43:27

seem a bit silly, but I'm trying to

43:29

emphasize this pattern to you guys. If

43:32

you find where there is friction in your

43:34

flows, if you pay close attention to

43:36

what keeps you from merging things, what

43:39

keeps you from being excited to hit that

43:41

button, what risks are blocking you,

43:44

what mental burdens and barriers are

43:47

keeping you from checking the code, what

43:49

friction is making it worse to do, so

43:51

you delay it more and more until it

43:52

never happens. All of these are

43:54

opportunities to improve your project,

43:56

improve your workflow, improve the tools

43:58

you use to build. And as you make more

44:00

of these improvements, you'll feel that

44:02

exponential growth in how much you can

44:04

ship and how much confidence you have in

44:06

what you're shipping. To go back to my

44:08

contribution rate, I was able to more

44:10

than double my throughput while on

44:12

vacation because more and more of these

44:15

changes landed and it got easier and

44:16

easier for me to verify my own work. But

44:18

I need to be real with you guys,

44:20

mistakes do absolutely still happen.

44:24

Sometimes things merge that shouldn't,

44:26

especially if we're not putting a lot of

44:27

effort into reading every line of code

44:29

anymore. Most of the bugs could not have

44:31

reasonably been caught by just reading

44:32

code. As such, it's really important to

44:35

have some form of a safety net, a way to

44:38

catch the mistakes so they don't affect

44:40

all your users or cause real problems.

44:42

We have an admittedly not perfect

44:44

solution for this with T3 Code, but due

44:46

to the unique nature of our audience,

44:48

it's proven to be pretty effective. That

44:51

solution is right here. the nightly

44:54

builds. Don't let the term mislead you.

44:58

Nightly builds happen every three hours

45:00

for us. So when a change lands, that

45:03

change will be out in the nightly within

45:05

3 hours, often less. We have a dedicated

45:08

set of nightly users. It's a few

45:10

thousand of our surprisingly big 200,000

45:12

plus user base. So if we do have

45:14

anything go wrong in the nightly, we

45:17

immediately get a ton of reports about

45:19

it. And let's be frank, nightly users

45:22

know what they're getting into. Things

45:24

will sometimes breaks. Things will

45:25

sometimes get removed after they're in.

45:28

The nightly builds give users the

45:30

feeling that they're staying more on top

45:31

of what we're doing, which is awesome

45:33

and true. I saw a lot of people who were

45:35

disappointed that I had the big

45:36

announcement for the new release cuz

45:38

they already had all the features cuz

45:39

they were on nightly. The nightly builds

45:40

are awesome because they give us a

45:43

shitload of useful information about

45:45

what may have broken. As such, our

45:48

stable releases pretty much never have

45:50

real regressions because they get

45:52

noticed so heavily during this nightly

45:54

testing window. There are other ways to

45:56

do this. You can do slow rollouts where

45:58

you only roll out changes to 1% of your

46:00

users and if you start seeing errors or

46:02

issues, you immediately roll back and go

46:04

figure them out. You can have a formal

46:06

QA team that does thorough testing of

46:08

everything before the code goes out. The

46:10

key things I want you to take away from

46:12

this point are, I guess, twofold. The

46:14

first is that you need a way for the

46:16

changes that break to not have to affect

46:19

a ton of users and be easy to catch and

46:22

fix. But the more important piece here

46:24

that is a little hidden underneath, I

46:26

want you to derisk the merge button. You

46:29

shouldn't even be looking at the poll

46:30

request until a bunch of agents have

46:32

relatively high confidence that it's

46:34

ready for you to look at. I want you to

46:36

have better ways to test the changes

46:38

yourself so that you have confidence,

46:40

too. I don't want you to have to worry

46:42

when you hit merge that if something

46:43

breaks, it's going to affect all of your

46:45

users. So, ideally, you will reduce as

46:48

much friction as possible before you

46:49

even get in the PR so that you have

46:51

relatively high confidence going in that

46:53

things will work and then after you've

46:55

built a bit more confidence that you're

46:57

hitting with no fear because if it does

46:59

break, the break will be caught and

47:01

addressed fast enough. In order to

47:03

derisk merge, you need to address both

47:06

sides. You need to address what makes

47:08

going to the PR in the first place feel

47:10

useless. You need to address the risks

47:12

when the PR seems ready to go that still

47:15

make merge scary. And our boy Agore has

47:17

caught on. This has been one of my

47:19

philosophies since day zero, since way

47:21

before I was doing content. Safety nets,

47:24

not guard rails. I'm not saying don't

47:26

test. We have a shitload of tests in T3

47:28

code and we're probably merging more

47:30

tests than we are features nowadays. But

47:32

the safety nets are what make T3 code so

47:35

safe. The fact that a change that breaks

47:36

things will be called out and notice

47:38

before it hits even a thousandth of our

47:40

users makes it so much easier to hit

47:42

merge and worry later. I think all of

47:45

these pieces are what has allowed me to

47:47

be as productive with T3 code as I have

47:49

been. From the inbox style sidebar that

47:52

I treat like a to-do list to all the

47:54

systems I have built for verifying

47:55

changes to all the unique ways I burn

47:57

tokens in order to be more confident in

47:59

my work to the ways I can ship with

48:02

confidence and the ability to roll back

48:04

if things do go wrong. All this has

48:06

enabled a part-time dev like me as well

48:08

as the full-time devs on my team to ship

48:10

way faster and way more confidently. And

48:12

I don't really care if you're using T3

48:14

code or not because the people who are

48:16

have already seen the difference and are

48:17

very happy with it. I know that a lot of

48:19

this might have come off as an

48:20

unintentional plug for T3 Code, but what

48:22

I really wanted it to be was a showcase

48:24

of how I improve the tools I use by

48:27

running into problems and also the

48:29

workflows I've built around T3 Code in

48:32

order to be as productive and effective

48:34

shipping software as possible. And I'll

48:36

be frank, a lot of why I made this is I

48:38

want to look back to it in six months

48:39

and see how silly some of the things I

48:40

was doing are because every time I make

48:42

one of these workflow videos, I get told

48:44

by a lot of people how helpful they are.

48:47

even a year later when they've long

48:49

since stopped being helpful. Man, I need

48:51

to do one of these every three months

48:52

now, don't I? Huh? Ah, what a fun

48:56

journey. Hopefully, you have a better

48:57

idea of how I've managed to stay

48:58

productive with the utter chaos that is

49:01

my life and my coding setups. Maybe you

49:03

learned some things here. Maybe you hate

49:04

everything I just showed you. Let me

49:06

know in the comments. And if you have

49:07

pro tips that are things that could

49:09

benefit my workflows that I'm not trying

49:11

yet, please let me know those as well

49:12

because I'm always looking for

49:13

opportunities to improve, streamline,

49:15

and be more effective in this new era of

49:18

development. Let me know how y'all feel.

Interactive Summary

This video details the author's personal workflow and strategies for maintaining high productivity in software development while managing multiple companies. The author demonstrates how they use AI agents, T3 Code, and Linux-based infrastructure to handle complex tasks, audit code changes, and manage pull requests. A central theme is the philosophy of 'safety nets, not guardrails,' using automated testing, nightly builds, and AI-driven monitoring to derisk the merging process and enable rapid, confident shipping of code.

Suggested questions

3 ready-made prompts