Full transcript
0:58Hello everyone. Surprise for anyone
1:01who's tuning in. So, it's been a wild
1:05couple of days. Um, Ralph is finally
1:08crossing the chasm and people are
1:10realizing that the economics of software
1:12development has
1:14forever changed. Um, if you run uh what
1:19I'm about to show you in a loop. What
1:22happens is you work out a unit economic
1:25cost for software development.
1:28Note there is a difference between
1:29software development and software
1:30engineering. Software engineering is
1:32some of the stuff we'll be doing here
1:34later as I expand some of these
1:36teachings.
1:38And essentially software development now
1:41costs $1042 US an hour. It's uh less
1:46than uh you would pay a fast
1:49fast food retail worker. It's cheap.
1:54It's now cheap. And not only is it
1:57cheap, you can do it autonomously.
2:00But to get it working, you have to
2:02understand the bare bones fundamentals
2:05from first principles. Like don't start
2:09with a jackhammer like Ralph. Like learn
2:12how to use a screwdriver first. Learn
2:14how to use a screwdriver first. Really
2:16important. just don't jump straight to
2:18the power tools.
2:20And yeah, so the calculations of $1042
2:23an hour is really simple. If you take
2:25API costs for
2:28uh Sonnet 4.5 from Enthropic right now
2:32and you run Ralph in a loop and you look
2:34at how much it costs in a 24-hour
2:36period, you're looking at $1042 an hour.
2:40And in that you're not out in a single
2:43hour you're outputting multiple days
2:46worth of work if not weeks levels of
2:48work. So in 24 hours you're you're
2:51actually at a place where you're mogging
2:53like backlogs type thing. So it gets
2:56really strange for what's going to be
2:58happening in our industry going forward
3:00because if you look at it right
3:03essentially
3:05um it's going to create this rift
3:08something I've been talking about over
3:09the last There's going to be this
3:11massive rift in software development
3:12between those who get it and those who
3:14don't. And I've been pleading with
3:17people, please invest in yourselves, get
3:19curious, pick up the screwdriver, master
3:22the screwdriver. Once you know the
3:24screwdriver, go for the jackhammer.
3:26Thanks, uh, Dex for the analogy. So,
3:28let's kick this off. Let's kick this
3:31off.
3:34So um one of the most fundamental things
3:36is you need to have your specifications.
3:40It doesn't matter about the tool that
3:42you use, the coding harness or what else
3:44have you. It's it's more about thinking
3:47about this from first principles. It's
3:49all about from first principles.
3:51Anthropic has released their plugin that
3:55does Ralph and I'm thankful for that
3:57because it's just created this
3:59inflection point. But the way that that
4:02works is uh not not it. You're going to
4:07get better outcomes if you do these
4:09concepts by hand. This is the
4:11screwdriver. Now, if you give me a
4:14moment, it looks like my Roomba is
4:15kicking off, which is kind of hilarious
4:17considering we're about to program a
4:19Roomba. So, give me a check.
4:35There we go. All right. So, the physical
4:37room is done. Let's do the virtual room.
4:41So, here is Loom. Loom is where I'm kind
4:44of reimagining what software development
4:46will be, what we need to throw away.
4:49Everything that exists today
4:52is all been designed for humans. If you
4:55think about the user space in Unix,
4:58that's all we've got TTY and all that
5:00stuff. That's everything has been
5:02compounding on a design for humans for
5:04humans for humans. Even agile and how we
5:07do software development and all the rest
5:09of the engineering practices, it's all
5:11been designed around humans. So if you
5:14go in a loop of essentially invalidating
5:17uh was this designed for humans, you can
5:20do like the five W's and maybe you're
5:22able to cut it. And if you're able to
5:23cut it, you need then need to think
5:25about okay, how do I mitigate cutting
5:27that? Was it adding value? Was it not
5:29adding value?
5:31And this is what Loom is. Loom is an
5:33experiment in essentially
5:35self-evolutionary software. It's uh the
5:40idea is if instead of having humans
5:45in the loop,
5:47what happens if humans instead are on
5:50the loop or programming the loop?
5:52And that's going to require a heavy
5:54engineering mindset.
5:57Um, and this is going to be very
5:58different to software development
5:59because software development is now
6:01fundamentally automated with the most
6:03trivial of bash loops and techniques.
6:07And uh, this is just the start. Um, this
6:10is going to cause an inspiration for
6:13other people to build their own things
6:16that are smarter than Ralph.
6:19Smarter than Ralph. I'm already seeing
6:20that taking place.
6:22So, Loom is of many things right now.
6:28Loom is uh essentially GitHub code
6:31hosting. It's its own source control
6:33that uses JJ. It's GitHub code spaces.
6:37So, I can remotely provision
6:38infrastructure.
6:41Um, it's got its own coding agent very
6:44similar to AMP or Claude code. um except
6:48that it alloys multiple different LLM
6:51providers together
6:53and it has the ability to
6:56spawn remote infrastructure and run not
6:58locally on the computer
7:01and I'm very much building in a actor
7:04pub sub type of mind where I want to be
7:08looking at creating chains of these
7:11agents or creating loops on loops on
7:15loops on Ralph and it extends way past
7:18software development. It crosses into
7:20the feature space or the product design
7:23space. Last night I added uh essentially
7:27feature flags or feature experiments uh
7:29by giving some prompts to essentially
7:32hey we want to clone launch darkly and
7:34we've got it now. So, the next thing
7:37really is, okay, I I'm missing some
7:39analytics and I've got this SAS company
7:41that wants to charge me $900 of $900 to
7:45renew and it's such a simple product and
7:48I'm going to need this functionality in
7:50Loom
7:51if I want to take Ralph to the to the
7:54product access. And that's something I
7:56do want to do. I want autonomous agents.
8:00I call them weavers that autonomously
8:03deploy
8:05software without any code review. It's
8:08already it's already doing it now.
8:10There's been so many failure domains. I
8:12can probably hear your objections. If
8:14Ralph the idea of running Ralph makes
8:16you want a Ralph, listen to it.
8:19Listen to it and then engineer away
8:21those concerns. That is now the job.
8:24That is now our job as software
8:26engineers is to keep the locomotive on
8:29the track. We are locomotive engineers
8:31now.
8:33We're no long we're no longer carrying
8:37cargo by hand onto the ship. We have the
8:41uh the box the boxes here. Um the
8:44shipping containers are here. So Loom is
8:46of many things. Um the way that Loom was
8:50built is really simple.
8:53It starts with a conversation
8:56and the conversation creates specs.
8:59The conversation creates specs. I see a
9:01lot of people out there saying, "Hey, I
9:04want to uh do like they handcraft their
9:08specs and they say they don't have time
9:10to create specs." No. Would you believe
9:14I don't create my specs. I generate
9:16them. Then I review them and edit them
9:20by hand. And then I just let it rip with
9:22Ralph. So let's do this now. Like I've
9:25got this SAS analytics company. I'm
9:28going to need analytics because I want
9:31my Weavers to be able to look at product
9:34metrics. I've got the ability for
9:36feature experiments to turn
9:38functionality on and off. And I'm
9:40engineering in a way that there is no
9:43code review. We have autonomous software
9:46or agents or weavers that will
9:49automatically when it's introducing a
9:51feature put a feature flag in
9:55deploy it look at the analytics decide
9:58whether it's actually fixed any errors
10:00or maybe it can do some optimizations
10:02and the landing page this is where we're
10:05going folks this is 2026 strap yourself
10:07in where we're getting towards
10:09essentially autonomous systems
10:12um Ralph is really just a malicking
10:14orchestrator
10:16that avoids context rot and compaction.
10:19Compaction is the is the devil
10:23that basically considers the entire
10:25system including the operating system as
10:29the complete unit. If you have some
10:32external functionality like some
10:34external vendor or API or whatever that
10:37is also part of the system. It's not
10:39just your application. Now, a lot of
10:41those external systems that exist today
10:44that we use in software engineering have
10:46been designed for humans.
10:48You might see me on a loop about this.
10:50So,
10:53what would they look like if they were
10:55designed for robots and how can we
10:58change that design so they're designed
11:00for robots? If we control the entire
11:03stack, then we can start doing
11:05optimization like serialization formats.
11:08JSON is not a great uh protocol when it
11:11comes to uh serialization and
11:14tokenization. It's not a great protocol.
11:17If we control the entire stack, then we
11:19can improve how tokenization works to
11:22drive these reactive agents and all of a
11:25sudden you can now operate cheaper
11:29than anyone else because you're
11:31optimizing. Like we need to be thinking
11:34about software engineering again. We got
11:36a brand new computer. What is something
11:39from something?
11:41Like for example, what is garbage
11:42collection now? What is Malo? What is
11:45Erlang? OTP principles and message
11:47passing.
11:49Why do we have user space?
11:52Like and all these things. Why do we
11:53have JSON? Why do we have TTY? And you
11:56start just cutting and start optimizing
11:58just to be the bare minimum that the
11:59machine needs. So let's go folks. Today
12:05we're going to
12:07show you how you create specs.
12:13Going to kick off cla code. Claw code's
12:15going to do its thing. yada yada yada.
12:17So the first thing you want to do and
12:18one of the first principles of Ralph is
12:20essentially deterministically malicking
12:23the array. Context windows are arrays.
12:26The less that you use in that array, the
12:29less the window needs to slide, the
12:31better outcomes you get. very much
12:33different to the anthropic which
12:34basically just completely keeps pounding
12:36the model in a loop until it gets
12:38compaction and then the compaction is a
12:41lossy function and then it can result in
12:43the loss of the the the pin and what I
12:47call the pin is this
12:52I've been incrementally building up loom
12:54through conversations just like this and
12:57this is my specifications and every time
12:59I add a new feature or adjust I
13:01continually continually evolve and
13:02update my specifications.
13:06And cool, this is now my pin. It's got
13:09my frame of reference of what this is
13:12all about. And I haven't injected it
13:14all. But what I've done, if I look at
13:17this file, is it's a whole bunch of
13:19lookup tables that link to a particular
13:21things and give hints to the search tool
13:24for like user authentication. and what
13:27are some other words used for user
13:29authentication which improves the hit
13:31rate of the search tool. The more it's
13:34able to find and look up that context,
13:36the less it's going to invent. I don't
13:39want it to invent anything to do with my
13:41current functionality, but I do want to
13:43use it as a pin or frame or reference to
13:46my current functionality.
13:51Okay, let's go. So, how do you build
13:53specs? It's really simple. Hey, I want
13:57to add product analytics
14:02like post hog into
14:07uh loom.
14:09It
14:11would be used uh
14:15by products built
14:19on loom.
14:22Thus we are collecting information about
14:27non
14:29uh authenticated
14:31users. Let's have a discussion
14:35and you can interview me.
14:41So we got our pin which basically you
14:43can use as a lookup source to learn more
14:45about the current functionality of the
14:47application.
14:50And then I just go like four four point
14:53four. I don't care about privacy. We
14:58collect
15:00data. Use the loom secret
15:05create for IP addresses. So this is
15:08something I've got. I've got a a special
15:10wrapper for PII type topics. That way
15:15logs for sensitive PII information will
15:18never end up any anything like IP
15:20addresses and all that stuff will never
15:23end up in logs. This is the engineering
15:24type topic. So I'm giving it some some
15:26direction. Later I'll play with the
15:29privacy etc. And this is really low
15:31effort just to teach people how simple
15:33it is. uh five
15:36integration is via web
15:42uh API thus clients will be
15:48uh the clients will be
15:52rust typescript and interact with the
15:58loom api.
16:01Next up, I guess we need SDKs for this
16:06new
16:08feature set.
16:10So, other applications
16:14can run experiments on the Loom
16:18platform.
16:33And this is it's a dance and dance in
16:36and out.
16:41I don't want any uh like mobile. So I'm
16:44going to say no mobile event model event
16:47model choose best practices. Look how
16:51post
16:53does it. Three,
16:57four, experiments integrate in with our
17:02existing flag
17:06specifications and system.
17:13Fine. For data storage, just store in
17:18our current
17:21SQL light. Right now I'm using SQL light
17:23because it's just really fast for
17:25iteration loop versus Postgress. Plus
17:27you get these machines that are massive
17:28now. They're really cheap. You can fogg
17:31a postgress database so hard these days.
17:34And uh whilst this is not scalable,
17:36that's not a concern I have right now.
17:38Um and in the end I'm not locking in my
17:41data model because I have a vision
17:43towards actors and OTP principles. Um
17:47maybe I can merge multiple of these big
17:50machines together and we start getting
17:52towards virtual actors and Microsoft all
17:55things. If you know you know
17:58okay identity
18:05identity model I don't know how does
18:09post hog do it let's discuss.
18:13So this is think about this is about
18:16you've got some clay on a pottery wheel
18:18and you're just like slowly making
18:21adjustments. You're you're molding the
18:23context window and you're testing what
18:25it knows and you're applying the
18:27engineering knowledge that you have
18:31and we're shaping the specifications.
18:34We're shaping the specifications.
18:47And it's a dance, folks. This is how you
18:49build your specifications. You got all
18:50the time in the world. And what's really
18:52cool is I could let this rip once it's
18:55done in a branch, and then I could like
19:00check its outcomes. It's free. It's
19:02pretty much free. I think it's like let
19:04it do a couple Ralph loops while I'm
19:07there
19:09and I would I'd be driving it by hand.
19:12I'll be malicking and doing the
19:14principles by hand. And if I'm okay
19:15where it's it's going, then I will just
19:19let it rip. Otherwise, if something's
19:21wrong, I'll go back to the
19:22specifications.
19:23I will adjust some of the prompt
19:26engineering. Maybe I take some different
19:28approaches for the back pressure.
19:30There's a lot of things you can do with
19:31back pressure. Our job is now
19:33engineering back pressure to the
19:35generative function to keep the
19:37generative function on the rails, the
19:40locomotive.
19:42Um
19:52yeah, we want person profiles inc
19:56anonymous and SDK can identify someone.
20:03I don't know what does post hogg do
20:06[laughter]
20:07three
20:10uh
20:12multi- tannency
20:17ty
20:19works by analytics
20:23uh tied to a loom or
20:30they're tied to a loom organization I've
20:32already got aback back. I've already got
20:34multi-tenency built in. So, this is me
20:36applying the engineering that you should
20:39use the search tool to uh learn how like
20:44I'm already doing multi-tenency.
20:46This is me steering the specification
20:49stage or adjusting the clay and the
20:50pottery wheel that you got to use the
20:52search tool. Don't reinvent yourself
20:54here.
21:23And the interesting thing is because
21:24it's the context window is just an
21:26array. There's no reason why you can't
21:29like productize just this process. Um
21:32even Anthropics doing it like the user
21:34ask question tool or the planning tool
21:37etc. But that's not good enough because
21:39there's no memory server side for
21:41inferencing. It's just what's in the RA.
21:44There's no reason why you can't preserve
21:47this conversation and rehydrate it
21:49later. So, you can either create another
21:52terminal once you write it out to disk,
21:54and we're going to be doing that very
21:55shortly,
21:57and then let it rip uh attended, and
22:00then let it rip unattended,
22:04and then come back here and make some
22:05adjustments before you let it go. a full
22:07hog or like you can make some sort of
22:10tool here that just like resumes this
22:13type of state resumes the state of the
22:16conversation. So you can resume the
22:18planning. There's no reason why the
22:20source of truth needs to be marked down
22:23folks. It can be just this array.
22:27Um
22:36Just do what post hog does.
22:42Okay. Then update specar.md
22:46and create a implementation plan at
22:50hostth hog.mmd.
22:53And this is the key is if you want to
22:55improve the ability for it to track the
22:57plan. I've seen people go JSON and other
23:00JSON etc. All you need to do is think
23:02about like the generative function into
23:04the search tool.
23:06strong linkage. You just got to do
23:08linkage
23:11and as bullet points
23:16and site the specification or source
23:20code that needs to be adjusted
23:24specification.
23:32And then you can you can start really
23:34playing with this because like the way
23:35that the read tool works is it works in
23:38hunks, folks. It works in hunks. So you
23:41can actually tell it to actually give
23:42specifics of what hunks in each file
23:44need to be done. I'm not going to do it
23:46here. I just need to let this rip. I've
23:48got about seven minutes to get this
23:50going and then I'm going to be AFK.
24:15Okay, let's call out something that's
24:16happening here. It's creating the new
24:17specification, but not only is it
24:19creating the new specification, it's
24:21updating my lookup table. The specs
24:24readme,
24:27it's updating the specs dot the lookup
24:30table. It's just a lookup table.
24:33And it has many different generative
24:35words to explain
24:38what each spec does. And those
24:41generative words act as essentially by
24:44having more descriptors of what the
24:46specification is. That lookup table will
24:49get more hits for the search tool.
24:53You need to think about these things
24:54from first principles because you can
24:56drive it all by hand. The more you drive
24:58by hand, the better outcomes you get. If
25:00you go straight for the jackham
25:02jackhammer, you're going to get terrible
25:03results. Absolutely terrible results.
29:19All righty, we now got a specification.
29:23Now, it would be really tempting to kick
29:26this off in this context window, but
29:29this context window or this array
29:31already has one goal. That's to create
29:33me some specifications.
29:36Now, there's a thing of context rot.
29:38This is what Ralph is all about is
29:42avoiding compaction by deterministically
29:46malicking the array. So question time.
29:51It should be no surprise what we need to
29:53do is create a new array.
29:56We're going to keep this one open. We're
29:57going to have a look to see what it
29:58does, right? Because I might want to
30:00refine my specifications. So I'm just
30:02going to like create another session.
30:06Hop on over.
30:11Cool. And we're going to go to code, go
30:13to Loom.
30:15And the first thing we're going to do is
30:18create a prompt.
30:21Prompt of MD.
30:23Okay, we need our PIN study
30:27specs readme.md.
30:30Study. What is this called? It's called
30:32the specs implementation plan.
30:38and pick the most important thing to do.
30:42So instead of this multi-step type of
30:44approach, what we're doing is we're
30:46allowing the LLM to decide what the most
30:48important thing is in our implementation
30:50plan.
30:52It's uh you you it's not high control,
30:55it's low control with high oversight.
30:59And by it only just doing one thing in
31:01lots of loops, then each loop only has
31:05one goal, one objective, and you you're
31:07using less of the context window, folks.
31:09Very important. Okay. Important.
31:17Entropic likes you to yell at the LM.
31:20Let's give us some completion promises
31:22or give us give some objectives. It's
31:25important. uh
31:29use the loom web i18 where uh and loom
31:38for typescript
31:40and I will just say this is like loom
31:4218n
31:47patterns for typescript
31:51or the loom iain n patterns for rust.
31:59Okay.
32:00Uh build
32:04author property based tests
32:08or unit tests whichever is best. I'm
32:12giving the judgment to the LLM to decide
32:15whether it should be a property based
32:16test or unit test. I'm not going to get
32:19into that dogma of where you should use
32:21each. This is your engineering
32:22knowledge.
32:24After making chain, after make
32:35run cargo test
32:40run
32:43the tests.
32:47When tests pass, commit and push to
32:52deploy the changes. Now, Loom
32:55automatically deploys. There is no CI.
32:59There is no CI. Um, it has full access
33:03to do pseudo. It's been programmed in
33:06loops. So, it can introspect the
33:08automatic deployment using pseudo. And
33:10pseudo is very safe in this case for
33:13bootstrapping up because uh I use Nixos.
33:18And if you know, you know.
33:20Now, I'm kind of halfassing this to be
33:23honest. Um because I'm depressed on
33:25time,
33:27you normally would do something a little
33:28bit better. So I'm just going to kick
33:29this off while true. Let's do the Ralph
33:32cat prompt. MD
33:35to claude dangerously skip permissions.
33:41Done. And no matter typo while true
33:46do
33:50Cool.
33:55We're now doing the Rap Wigum. While
33:56true, we're deterministically malicking
33:59the harness or the or harness. And in
34:03the bigger picture of this, Loom is the
34:05thing that actually deterministically
34:07malics or is the Ralph loop. And it's
34:09running many Ralph loops and they're
34:13chain reactive as as much as need be
34:16like Erlang style.
34:19And uh it is
34:23uh let me just check. I think I made a
34:25mistake here. So this is the idea. You
34:27don't have to immediately go into full
34:29blown raft.
34:31You can do it attended. I forgot to
34:34update the implementation plan when the
34:39task is done. Y.
34:44Cool.
34:46And this sets up our state checkpoints.
34:49Let's kick off Ralph again. So, this is
34:52the practice backwards, forwards. You
34:53like you don't just let it rip. You you
34:56you watch this. Well, you're watching
34:58it. I'll call out anything that I notice
35:00that's a little bit weird and I'll
35:01cancel this. I'll go back and adjust my
35:03prompt. Maybe this was a little bit more
35:06effort. I would like inspect the code to
35:10make sure it's following conventions.
35:11But like for me, at least with Loom, it
35:16really doesn't matter if it outputs
35:18something bad because I would just sit
35:21down there with a highlighter and have a
35:23look what if it's bad. And that's just
35:25another Ralph loop to pull and curate
35:28and refactor the codebase to follow
35:30conventions. If if it gets
35:32internationalization,
35:34I would just that's just a raph loop to
35:36force it to do that. If it doesn't use
35:38aback uh for security, that's just
35:41another RA loop. It's just different
35:43techniques of the RA loop to automate
35:46things. So, this is now running. So,
35:48let's just kick off some music. I'm
35:49going to go AFK and uh gonna go out
35:53tonight. So, cheers folks. Thanks for
35:55tuning in. I hope this answers a lot of
35:56questions.
35:58Um it is you got to approach this from
36:01first level's principles and you can do
36:02Ralph by hand because it's all about
36:06deterministically malicking the array.