The Spatial Harness: Bringing Agents to the Canvas — Max Drake, tldraw
Read the talk
The Spatial Harness: Bringing Agents to the Canvas
Max Drake traces tldraw’s experiments from interpreting a drawing to navigating a canvas, coordinating visible agents, managing coding tasks, and scripting a desktop editor.
From a talk by Max Drake
At a glance
Ideas worth remembering
A spatial harness needs to explain both perception and action: how screenshots and structured data describe the canvas, and how proposed edits affect it.
Autonomous canvas work adds goals, todos, and viewport movement to a single-shot editing capability. Viewport movement lets the agent seek information elsewhere in the workspace.
Visible agents serve two interface needs: distinctive appearances expose identity, while animations expose activity. An orchestrator can assign work, wait for completion, and receive a prompt to review it.
The later experiments loosen the canvas-specific boundary: a dependency graph manages coding agents, while a desktop server exposes the editor for JavaScript scripting by agents with access to outside work.
Access to information and successful implementation are separate milestones. Drake reports that the opening agent found the email, document, and specification, but the fluid-simulation build remained unfinished at the close.
A task running alongside the talk
The presentation opens by putting an agent to work. Drake asks it to find a Notion document linked in an email from his colleague Spencer, then build the proposed demo in the desktop app. He leaves it running while he introduces his work on canvas agents. The request combines finding information outside the canvas with implementing something inside it, setting up a test that he will return to later.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
An engine for the canvas, then a foundation for agents
tldraw has three roles in Drake’s account: a free infinite-canvas whiteboarding app, the London company that builds it, and the SDK underneath it. The app supplies familiar operations such as selection, arrows, and resizing. The SDK makes those capabilities available to other canvas products, including Replit’s agent canvas. Drake considers this reusable engine the most important part of the company’s work.
The SDK addresses a recurring implementation trap. Developers would start with an idea for a canvas application, then spend their effort on selection, resizing, and matrix math before reaching the application itself. Providing the canvas engine lets them concentrate on their product. Drake says language models introduced a similar obstacle one layer higher: people wanted models to manipulate objects in space, but lacked established practices for making that interaction work.
The canvas already has useful collaboration machinery. Both the app and SDK support live synchronization, with collaborators’ cursors, selections, and viewports visible to one another. Drake’s premise is that these same signals can help people collaborate with agents: a shared workspace can reveal where a participant is looking and what it is manipulating.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Why a coding harness does not automatically solve space
Drake gives an explicitly simplified explanation of coding agents’ success: writing code fits the text-in, text-out medium in which language models were trained. A user supplies a textual prompt, and the model produces textual code. He contrasts that with requests to align interface elements, where his experience has been that agents struggle to understand and operate in two dimensions.
This is a motivation for engineering a spatial harness, rather than a measured claim that every agent fails at layout. In Drake’s account, understanding two-dimensional space and taking useful actions within it require substantial additional work. That work becomes the subject of the successive tldraw experiments.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Reading ordinary shapes and predicting edits
The first experiment establishes basic canvas interpretation. Drake asks a model to make a mouse blow out a candle. The model receives a screenshot, JSON, and other information about the canvas. The engineering task is to explain how these representations describe the scene, so the model can connect what it sees with the underlying canvas data.
The mouse is not a special semantic shape with a built-in action. It is composed of ordinary canvas shapes. Drake reports that the result adds wind and a little smoke in the appropriate positions. The example therefore asks the model to interpret a composition of shapes as a scene and choose edits that express the requested event, rather than invoke a predefined mouse behavior.
Interpretation is only half of this interface. The model also needs instructions for acting on the canvas and understanding how its proposed actions will change it. This experiment uses a single-shot prompt: it demonstrates an interpretation-and-edit capability, but does not yet provide an agent that can independently search, plan, and continue working. Drake also notes that smoke appears only sometimes, so the example should not be read as a guarantee of identical results.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Giving the agent goals and a movable viewport
The tldraw agent starter kit wraps that earlier capability in a harness for autonomous canvas work. Drake identifies its code as MIT licensed. His example asks the agent to find a friend elsewhere on the canvas and bring it over to a cat, adding that the cat’s favorite color is red. This introduces a task whose relevant objects extend beyond the starting view.
The agent uses the prompt and available canvas information to make goals for itself, displayed as todos. It changes its own viewport to inspect other parts of the canvas. Drake compares this to a coding agent searching a repository for a definition: moving the view provides a way to seek information that is not immediately in front of the agent. The important extension is the ability to set goals and work toward them through further inspection, rather than produce one edit from one prompt. The narration explains that behavior without explicitly confirming the final friend placement.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Making agents recognizable participants
The next project, fairies, brings agents into the canvas’s multiplayer setting. The goal is to let people work together with their agents and let agents work with one another. Drake introduces a visible fairy named Joan, demonstrates grabbing and throwing it, and shows appearance controls such as hats, color, and a leg slider. He also offers the audience access to the multiplayer demo, saying it requires Gmail signup but no token payment.
The customization has a practical purpose beneath the playfulness. When several agents are working across a canvas, a user needs to recognize which one is which from a high-level view. Distinct appearances provide that identity. Individual fairies can receive requests such as drawing a cat, while the broader system supports collaboration among them.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
A group chat with visible delegation and waiting
Drake moves to a scene where a colleague’s agents are already working, summons his own agents, and selects them together. Selecting multiple agents opens a group chat. He asks the group to prepare a memo of fiscal year 2025 financial data for a board meeting in 10 minutes. The request illustrates group coordination; the narration does not establish a completed memo or the accuracy of any financial figures.
One fairy writes a plan and acts as the orchestrator. It defines and assigns a task, then waits for other agents to start and finish the work. Completion is intended to notify the orchestrator and prompt it to review the result. Drake briefly thinks the interaction is not working, then identifies one fairy that has created the task and another working on it. The demonstrated state is delegation in progress, with review described as the next step.
Animations make working state readable without requiring the user to inspect every conversation. Drake uses the example of 10 agents: their visible states can tell the user what is happening without reading 10 chat histories. Together with recognizable appearances and a shared canvas containing colleagues’ agents, this gives the interface a way to expose both identity and activity at a glance.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Turning a dependency graph into an interface for coding work
Fairies expose a boundary in the earlier design: their harness is built around the canvas, making integration with work outside it difficult. Drake describes them as trapped in the canvas. His next experiment uses the canvas to manage agents that can do coding work elsewhere, rather than requiring all their activity to fit a canvas-specific harness.
The interface comes from a practice at tldraw: near a launch, the team replaces its task-tracking software with one large dependency graph on an ordinary canvas. Shapes remain movable, dependencies show what must happen before something else, and colors expose progress. Drake shows a graph from the fairies launch whose tasks are green because they are finished. He wants to preserve that overview while making the graph capable of initiating the work it represents.
The prototype is called the tech tree app. Each task in its dependency graph is a coding agent that can be started and run autonomously. The demonstration project is a small multimodal-input app that Drake says agents wrote entirely. He opens a pull request for a completed gesture-control task and merges it during the demonstration without asking for an explanation. The task subsequently appears complete. This shows a connection between graph tasks and pull-request handling, but the quick merge supplies little evidence about the implementation’s quality.
The canvas also becomes a surface for specifying new work. Drake draws a prompt, wraps it in a task, names it facial animation canvas control, assigns it to an agent, and starts it. This places an interface above the individual coding agents for managing their work. Because the app is multiplayer, colleagues can join, add tasks, edit them, and see what has been happening. The shared graph combines task specification, execution controls, and an overview that multiple people can use.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Exposing the editor to an agent outside the canvas
Returning to the opening request, Drake finds that the fluid simulation has not been built after 13 minutes. The agent is running locally and working on files, so he leaves it running. This becomes an introduction to the desktop app’s mechanism: it exposes the running editor instance through a server, allowing an agent to write plain JavaScript against the editor. Drake calls this code mode and describes the desktop app as a scripting environment.
An agent with access to the computer can connect this editor scripting to effects outside the canvas. Drake presents a colleague’s example that uses canvas rectangles as a window-manager interface for real desktop windows. He says the agent made rectangles and moved the windows, but only speculates that AppleScript or something similar handled the movement. The supported mechanism is the connection between canvas controls and desktop actions; the specific operating-system integration is not established.
A second example uses actual desktop windows to play Pong, with the tldraw desktop app running in the corner. Drake refreshes the example before describing it as working. The playful demonstration illustrates the broader idea of temporary spatial interfaces that control real computer activity. It does not establish how reliably such an interface would behave in routine use.
The opening build is still running when Drake checks again. He nevertheless identifies progress in finding the inputs: the agent retrieved the Gmail message, obtained the Notion document, and found the specification. The architecture lets an agent use canvas primitives while retaining access to real data and work outside the canvas. Retrieval has succeeded in his account, while implementation remains unfinished; those are distinct outcomes.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Read the complete timestamped transcript
- 0:01
[music]
- 0:13
Thank you for coming here to my talk to
- 0:16
watch me talk about uh agents on the
- 0:18
canvas. Um the first thing I'm going to
- 0:21
do though is uh before I have to record
- 0:23
my screen. Uh the first thing I'm going
- 0:25
to do is I'm going to ask my agent to do
- 0:27
something on the canvas.
- 0:30
And what I'm going to do is say, "Hey,
- 0:33
uh, my colleague Spencer just emailed me
- 0:35
a link to a notion document, uh, for a
- 0:37
really cool demo we could build with the
- 0:38
TL desktop app. Can you like find that
- 0:41
document and then can you build it on
- 0:42
the desktop app?"
- 0:45
Thank you.
- 0:50
Okay, so that's going to build uh, and
- 0:51
then we're going to come back to it
- 0:52
later and hopefully it'll work. Um, hi
- 0:55
everyone, my name is Max Reich. Thanks
- 0:57
so much for coming. Um I work on uh
- 1:00
agents on the canvas at uh TLA. I'm a
- 1:03
product engineer there. Um so first
- 1:05
things first, am I qualified to be
- 1:07
giving this talk? I like to think so.
- 1:08
I've been doing like agents on the
- 1:10
canvas stuff since before chat GBT came
- 1:12
out. Um I think it's really cool. I
- 1:14
think there's like so much UX stuff you
- 1:16
can do with when you get LM, you have
- 1:18
them working in space. Uh and I think
- 1:20
it's really interesting. I've been doing
- 1:21
it for about as long as you can have
- 1:23
been doing it. Um more recently I've
- 1:25
been talking about this a lot. Um,
- 1:27
here's some proof. Um, and yeah, so I
- 1:30
work at this company called Teal Draw.
- 1:32
Um, can I get a quick show of hands? Has
- 1:33
anybody ever heard of or used Teal Draw
- 1:35
before?
- 1:36
>> Yeah. Okay. Um, awesome. So, yeah, the
- 1:39
thing that you've probably used if you
- 1:41
use Teal Draw is, um, this app right
- 1:44
here. So, this is all Teal Draw. Uh,
- 1:46
this is a free uh, infinite canvas
- 1:48
whiteboarding app. Um, you know, we have
- 1:50
selections and arrows and resizing and,
- 1:53
you know, all the things that you need
- 1:55
in a in a whiteboard. Um, Traw is also
- 1:58
the company uh that makes this app. It's
- 2:01
based in London. It's where I work. Um,
- 2:03
but the last thing that TLAR is, which
- 2:05
is, I think, in my opinion, the most
- 2:06
important, is it's the Infinite Canvas
- 2:08
SDKs that that powers this app. Um, and
- 2:11
so what that means is that, you know,
- 2:13
this is kind of the teal draw. The SDK
- 2:15
is the engine that powers a lot of
- 2:17
Infinite canvas experiences. Um because
- 2:20
it turns out it's really hard to get
- 2:21
that kind of stuff right. Um and uh so
- 2:24
if you ever want to build a Muro
- 2:26
competitor or a slide designer or if
- 2:28
you're like Replet um Replet has their
- 2:31
whole new uh agent canvas stuff built on
- 2:33
top of TLR. Um, and so the reason we
- 2:36
built TL Draw in the first place was
- 2:38
that we were running into this issue or
- 2:40
people were running into this issue
- 2:41
where they had this idea for this like
- 2:42
really great killer canvas app. Uh, and
- 2:45
they went to go build it and everybody
- 2:46
would run into the same problem where
- 2:47
they would run into
- 2:50
they would have trouble making the
- 2:51
actual canvas part of of the app and
- 2:54
they would, you know, trying to deal
- 2:55
with resizing and selection and, you
- 2:57
know, all the matrix math. And the issue
- 2:59
is that they wouldn't be able to build
- 3:00
their actual app itself. They would get
- 3:02
stuck on the canvas. And so we built
- 3:03
Teal Draw to kind of be the engine um
- 3:06
that could power that could be the
- 3:07
canvas so that they could focus on the
- 3:09
actual app. Uh when LLM came out, we
- 3:12
like a lot of other people saw that this
- 3:13
is going to be this weird new type of
- 3:15
software. I don't know if anyone, you
- 3:17
know, I'm sure a lot of you were
- 3:18
building in 2022 and it was really
- 3:20
exciting. Um and a lot of people it was
- 3:22
the exact same thing. People had the
- 3:23
idea had an idea for this cool app that
- 3:26
would, you know, involve LM on the
- 3:28
canvas having them manipulating things
- 3:30
in space. but then they would try to
- 3:32
build it and they'd get stuck. Um there
- 3:34
were no best practices. People didn't
- 3:35
really know how to do it. And so at TL
- 3:37
Draw we uh realized that we need to make
- 3:39
it easy for people to build uh with
- 3:41
agents with LLMs on the canvas. Um and
- 3:45
also so Teal Draw the SDK as well as the
- 3:47
app has multiplayer built in with like
- 3:48
live sync. It's really nice. There's
- 3:50
cursors. There's you can see your
- 3:52
collaborators cursors and selections and
- 3:53
viewports. And I think all of the things
- 3:55
that make just the canvas in general a
- 3:57
really great uh place for interacting
- 4:00
with and collaborating with your
- 4:01
colleagues also make it a really great
- 4:04
place for interacting uh and
- 4:05
collaborating with agents. Uh and I hope
- 4:07
I'm going to be able to show you guys
- 4:08
some of that um in the demos that come
- 4:10
up. Um so before we talk about agents on
- 4:14
the canvas, uh really quickly I want to
- 4:15
talk about agents not on the canvas. Um
- 4:17
I'm sure you guys have all used an app
- 4:19
that looks like this, you know, claude
- 4:20
code. And I'm going to really
- 4:22
oversimplify here, but basically, uh,
- 4:24
part of the reason why these apps are so
- 4:26
good and why they work is because
- 4:27
they're, you know, the medium in which
- 4:29
they're working, writing code is
- 4:31
essentially the medium in which they
- 4:32
were trained. You know, it's it's text
- 4:33
in, text out. That's how they were
- 4:35
trained. Um, and when we work with them,
- 4:37
we give them a prompt and they write
- 4:39
code. It's text in, text out. Uh, you
- 4:41
know, again, oversimplifying, but that's
- 4:43
essentially how they work. I don't know
- 4:45
if you guys have ever, you know, tried
- 4:46
to get your agents to do like UI stuff
- 4:48
and try to get them align to align
- 4:49
something. found that they could not do
- 4:51
that whatsoever. Um because it turns out
- 4:54
agents are really really bad at working
- 4:56
in 2D space and understanding 2D space
- 4:58
and actually requires like a lot of
- 5:00
engineering work to get them to uh do
- 5:02
it. And that's kind of the project that
- 5:04
we've been embarking on at Teal Draw
- 5:06
recently. Um and so the first thing we
- 5:08
had to do, this is an older project, but
- 5:10
the first thing we had to do is get them
- 5:11
to teach them teach the agents or at
- 5:13
this point not agents LLM to understand
- 5:16
the canvas and understand kind of what
- 5:18
they're even looking at. Um, so we had
- 5:20
this project called teach um where um we
- 5:24
tal So I'm going to I'm going to prompt
- 5:25
this really quick. I'm going to say,
- 5:27
"Hey, make the mouse blow out the
- 5:28
candle."
- 5:31
Yeah. So that's going to take a second.
- 5:33
This is this is an older uh older
- 5:35
project, but basically what we had to do
- 5:37
is we had to kind of like teach the LMS
- 5:40
how to take the like the screenshot that
- 5:42
we give it and the JSON and all of the
- 5:43
other information about the canvas and
- 5:46
Oh yeah, there we Okay. So yeah, that's
- 5:48
some that's some wind. Uh it's
- 5:51
is it sometimes it gives us smoke as
- 5:53
well. Yeah, and we got a little smoke as
- 5:54
well. So So we basically had to take it
- 5:57
how to like and I want to be very clear
- 5:59
this is not um this is not like a
- 6:01
special mouse shape. These are just like
- 6:03
uh you know the these are just shapes uh
- 6:06
on the canvas. This is um and so the
- 6:08
work behind this it's a singleshot
- 6:10
prompt but we basically we tell the
- 6:12
agent how to interpret uh both via
- 6:14
screenshots and via the data um what is
- 6:17
actually on the canvas like what it's
- 6:18
looking at um which is actually you know
- 6:20
it's not a trivial problem and then also
- 6:23
how to we teach it how to actually act
- 6:25
on the canvas and to understand how the
- 6:27
actions that it produces will affect the
- 6:29
canvas. So, you know, it got it, you
- 6:31
know, it made the it made the smoke, it
- 6:32
made the it made the wind, it got the
- 6:34
positions right, and it understood what
- 6:36
it was doing. Um, so we we got this we
- 6:39
kind of figured out how the um like kind
- 6:42
of we got we taught it what the canvas
- 6:44
is. Uh, but this was like a single shot,
- 6:46
single prompt kind of thing. Um, and so
- 6:48
the next thing we built is the uh teal
- 6:50
draw agent starter kit. Uh, which
- 6:52
basically turns that and wraps in a
- 6:54
harness that lets an agent work
- 6:55
agentically on the canvas. Um, the code
- 6:57
is also MIT licensed. You can find it on
- 7:00
um that you can find on the website. So,
- 7:01
here's a little here's a little cat. I'm
- 7:03
going to make this a little bigger. Um
- 7:05
but what I'm going to say is, "Hey, so
- 7:07
somewhere else on the canvas uh there
- 7:10
are uh some friends for the cat. Can you
- 7:13
please uh bring one of them over to the
- 7:14
cat? Um her favorite color is red."
- 7:18
And so I'm going to zoom out. I'm going
- 7:20
to show you guys what's actually going
- 7:21
on. So you can see the the view of the
- 7:23
agent. There's some there's some
- 7:24
potential friends over here. And um you
- 7:26
know if you read the All right. So and
- 7:29
basically what's going on is that the
- 7:31
agent has kind of like we've given it a
- 7:33
prompt and uh using the information it
- 7:36
has about the canvas. It's uh going to
- 7:39
kind of like make some goals for itself.
- 7:40
You can see there's some to-dos in the
- 7:41
corner here. It's it changed its view in
- 7:44
order to see um what was you know the
- 7:48
other stuff that was on the canvas. same
- 7:49
way that if you ask a coding agent um
- 7:52
you know you ask it you know where where
- 7:54
do we define this thing in the codebase
- 7:56
it can go and it can search it can find
- 7:58
it. So this is kind of like turning that
- 8:00
singleshot uh prompting experience into
- 8:03
this kind of like agentic thing that you
- 8:05
can uh have you know it can autonomously
- 8:07
set goals and and work towards them. The
- 8:12
uh next thing we did um we did this this
- 8:15
uh project called fairies and so we
- 8:18
basically we had this agent experience
- 8:19
but we realized that you know teal draw
- 8:21
and you know the canvas in general is so
- 8:23
collaborative it's so multiplayer and we
- 8:24
wanted to basically we wanted people to
- 8:26
be able to work together with their
- 8:28
agents and we also wanted the agents to
- 8:30
be able to work together
- 8:32
so this is this is a ferry um there's
- 8:35
also you guys want to scan this QR code
- 8:37
you can actually this is multiplayer you
- 8:39
can join if you want you it requires a
- 8:41
Gmail signup But you don't need to pay
- 8:42
for tokens. Um, this is this is what the
- 8:44
link is. So, basically, this is a this
- 8:46
is a fairy. Um, this fair's name is is
- 8:48
Joan. They don't like being they don't
- 8:50
like being grabbed. Um, you can you can
- 8:52
throw them around. You know, we added a
- 8:54
lot of really important stuff. You can
- 8:55
um you can you can change its hat. Um,
- 8:59
you can change the the color and and
- 9:01
this seems silly, but it's actually
- 9:03
really important. uh and I'll talk about
- 9:04
this a little bit more later, but
- 9:05
actually understanding uh when you get a
- 9:07
high level view of when you see your
- 9:08
agents working on the canvas, it's
- 9:10
important to know which one is which.
- 9:11
And so differentiating them is actually
- 9:12
important, which is why, of course, we
- 9:14
added the leg slider. Um
- 9:17
but so, you know, I can say like, you
- 9:20
know, I can I can I can say hey to it.
- 9:22
Um
- 9:24
and I can say, you know, something like
- 9:26
draw a cat. Uh and I can have it work.
- 9:29
But the most important thing here is
- 9:31
that fairies have friends, right? and
- 9:32
they can here we go. Uh
- 9:36
>> and they can fairies can work together.
- 9:37
And so we kind of designed this like
- 9:38
multi- aent collaboration system that
- 9:40
works on the canvas. Um and I'm going to
- 9:44
actually I'm going to go to
- 9:46
I think one of my
- 9:49
Yeah, I think so. My my colleagues
- 9:50
agents are here working uh making this
- 9:52
this really great scene. Um I'm going to
- 9:55
bring mine over um summon
- 10:00
and I'm going to give them a slightly
- 10:01
different prompt. So, I'm gonna select
- 10:02
them all. And now I have a group chat of
- 10:03
of the agents, right? And I'm going to
- 10:05
say, "Hey, I have a board meeting coming
- 10:07
up in like 10 minutes, and I don't have
- 10:09
any of my my figures. Can you draw up
- 10:11
like a little memo for all of my uh
- 10:13
financial data for fiscal year 2025?
- 10:16
Thank you."
- 10:18
Okay. So, what what's going to happen
- 10:20
there basically is this kind of like
- 10:22
creates this uh multi- aent, you know,
- 10:24
coordination thing. We have uh one of
- 10:26
the fairies is writing uh writing out a
- 10:29
plan. You can see it. Um, and again, the
- 10:32
animations are kind of cute and funny,
- 10:34
but it's actually really important. I
- 10:35
don't have to read a chat or go through,
- 10:37
you know, imagine if I have 10 agents
- 10:38
working. I don't have to read a chat in
- 10:40
order to know what's actually going on.
- 10:42
I can look at the state of the agents.
- 10:44
Uh, and I can actually, you know, I can
- 10:46
can see what's happening. So, we we have
- 10:50
a task here that's been defined. Um,
- 10:54
it seems like, you know, the the ferry
- 10:55
is is uh waiting for that to to finish.
- 11:00
Yeah. So, that one's one's board. That
- 11:02
one's waiting. So, this is the
- 11:03
orchestrator ferry. What what it's done
- 11:04
is it's assigned the it's assigned the
- 11:06
task. Uh, and now it's waiting for the
- 11:09
other ones to start and finish it. Um,
- 11:10
and it's going to get notified. It's
- 11:12
going to get prompted in order in order
- 11:13
to review. Um, it seems like forever
- 11:16
reason's not working, but thank Oh,
- 11:19
never mind. So, yeah, we have one we
- 11:22
have this one. So yeah, we have one
- 11:23
fairy who made the made the task, one
- 11:25
fairy who's working on it. And so this
- 11:27
is this kind of um you know, multi- aent
- 11:30
coordination system on the canvas. I
- 11:31
have, you know, you can see my colleague
- 11:33
has his agents over here. Uh they're
- 11:34
they're working as well. Um and so you
- 11:37
can kind of collaborate with people and
- 11:38
with agents in this uh environment. And
- 11:41
I don't know, I think that's really
- 11:42
cool.
- 11:44
the
- 11:46
so the the next thing. So the problem
- 11:49
with fairies is that um they're kind of
- 11:52
trapped in the canvas and all the stuff
- 11:53
you've seen before. This requires if you
- 11:55
want to build something like this, this
- 11:56
requires like the you to like opt in and
- 11:59
have your entire harness be a like
- 12:00
canvas harness. Um and the downside of
- 12:03
that is that it makes it really hard to
- 12:04
have any of this work with stuff like
- 12:06
outside in the real world. The fairies
- 12:07
are the fairies are trapped in the
- 12:09
canvas. Um, and
- 12:13
so I I I built this experiment. We had a
- 12:15
little hackathon uh internally. Um, but
- 12:18
first as a quick motivation for that,
- 12:20
um, at Teal Draw whenever we have an
- 12:21
whenever we're getting closer to a
- 12:23
launch, we like abandon all of our task
- 12:25
tracking software and we make just one
- 12:27
massive dependency graph of how like so
- 12:30
this is what an actual this is a real
- 12:32
thing from when we launched fairies
- 12:33
actually. Um, and so this is what it
- 12:35
looks like when we're like really like
- 12:38
when is hitting the fan at at
- 12:39
tealraw when we're launching something.
- 12:41
Um, and I really like this interface
- 12:44
because it it kind of lets you This is
- 12:46
not like a special app. This is still
- 12:47
just tealraw.com. You can, you know,
- 12:49
move your shapes around and things like
- 12:51
that. Um, but I really like this because
- 12:53
it both it lets you see like what
- 12:55
depends on what. It lets you know what's
- 12:57
coming next. It lets you get a highle
- 12:58
overview. You know, these are all green
- 13:00
because we finished them, but you know,
- 13:01
you can imagine during the project, some
- 13:03
of them are in process. And I really
- 13:05
want I really wanted something like
- 13:06
this. Um, but something that I could
- 13:09
actually that could actually do the work
- 13:11
itself. And so I um prototyped this
- 13:14
thing. It's called the tech tree app.
- 13:16
And basically, it's similar to this.
- 13:17
It's a dependency graph, but each of
- 13:19
these tasks um is a a coding agent that
- 13:23
you can kick off and you can have your
- 13:26
agent kind of like be running and doing
- 13:27
them autonomously. Um the project itself
- 13:30
that's working on it's this little um
- 13:33
this is just kind of like a demo app. Um
- 13:35
but this is Can I
- 13:38
Yeah. So this is this is a little
- 13:41
fun, you know, multimodal input thing. I
- 13:44
haven't written any of the code for
- 13:45
this. This is um this is all written by
- 13:47
agents. But I can manage all of the work
- 13:49
is being done in this desktop app uh or
- 13:51
in this app here. And so I can do
- 13:53
something like I can see this one has
- 13:54
has finished uh building some gesture
- 13:57
controls for the canvas. So I can open
- 13:59
the PR uh and unfortunately sorry
- 14:01
Jeffrey I am just going to merge this.
- 14:03
I'm not going to uh have it be explained
- 14:06
to me. But so this is [snorts]
- 14:08
and so yeah great. Awesome. It looks
- 14:10
good. Um and then you know eventually
- 14:12
this is going to get marked uh as as
- 14:15
complete and this is also multiplayer
- 14:17
which is really cool and you can have
- 14:18
people working together. Yeah. So that's
- 14:20
finished. Um and I you can also prompt
- 14:24
from like inside the the app you can
- 14:27
draw and have a prompt. So I can
- 14:28
basically I can just take all of this uh
- 14:30
and I can draw a little like so this is
- 14:32
my prompt and I can wrap it in a task um
- 14:35
and I can you know call it facial
- 14:37
animation canvas control and then I can
- 14:41
assign that to cloud and I can just hit
- 14:42
run and so now that's working as well
- 14:44
and so this is kind of like you know
- 14:46
this is kind of something similar to
- 14:47
conductor or openai symfony where you're
- 14:49
using a kind of like one abstracted
- 14:51
interface above uh what the actual in
- 14:54
order to like manage your your multi-
- 14:55
aent uh coordination and things like
- 14:57
that And the thing I like about this
- 14:59
also is that because this is
- 15:00
multiplayer, one of my colleagues can
- 15:02
come and join and add tasks and uh edit
- 15:04
things and see the work that's been
- 15:06
going on. So, it's much more
- 15:07
collaborative than um like your own
- 15:09
instance of something. Um here's the
- 15:12
moment of truth. Let's see if that demo
- 15:13
that I had it build in the beginning
- 15:16
worked.
- 15:18
Um
- 15:20
all right, it's it hasn't built the
- 15:21
fluid simulation yet. Uh it's been
- 15:23
working for 13 minutes. Um
- 15:28
that's actually fine. So basically this
- 15:29
is the TL Draw desktop app. Um something
- 15:32
that's really cool here is that we have
- 15:34
uh so this is running locally. It's
- 15:35
working on files. We'll see if it
- 15:37
finishes. We'll we'll let this run. Um
- 15:39
but basically what this does is this uh
- 15:42
this basically exposes the editor
- 15:43
instance of the TLR app that's running
- 15:45
here. And it has a server that lets any
- 15:48
agent uh for example my cloud code uh
- 15:50
write just plain JavaScript against the
- 15:53
against the editor. and and it it
- 15:57
basically it you know it's it's code
- 15:59
mode if you've ever used code mode um
- 16:01
but you can basically turn your teal
- 16:03
desktop app into um a like scripting
- 16:06
environment and the one of my colleagues
- 16:09
actually is u I'm going to this is this
- 16:13
is the kind of off the rails bit of the
- 16:14
canvas here um or of the of the talk. So
- 16:19
here's something my colleague made uh
- 16:21
using the same thing. So this is he has
- 16:23
the teal draw desktop app in the corner
- 16:24
here and he's using it as his uh window
- 16:27
manager. Um and what he did the way he
- 16:30
did this was he just told claude code to
- 16:32
because cloud code has access to your
- 16:33
actual computer. It's not locked into
- 16:35
the canvas. Uh it basically you know it
- 16:37
it made some rectangles and it uh
- 16:40
probably wrote some Apple script or
- 16:41
something to actually re uh you know
- 16:44
move the things around. And so you can
- 16:45
kind of make all of these uh like
- 16:47
ephemeral UIs and have them actually be
- 16:50
doing things in the real world. Um,
- 16:52
another really cool one that he did was,
- 16:55
um, if this loads, it's Pong on the
- 16:58
desktop. Uh,
- 17:01
let's hit it with a little refresh there
- 17:02
and see if it works. Yeah. So, this is
- 17:05
he's got in the corner here, you know,
- 17:07
you you have uh you have TLR running.
- 17:10
This is the desktop app and it's using
- 17:12
the Windows in order to uh play Pong.
- 17:14
And so again, like kind of crazy, but
- 17:17
there's uh you know, maybe it seems a
- 17:19
little silly, but
- 17:22
let's see if this this worked. Oh, it's
- 17:24
still working. Man, it was usually much
- 17:26
faster. Um, but I I think this stuff is
- 17:29
so cool because this lets you kind of,
- 17:30
you know, do all of the weird kind of
- 17:32
like spatial interfaces that you can do
- 17:35
uh on the canvas. You get all of like
- 17:36
the primitives of the canvas. Um, but
- 17:39
you can like you can have your agents
- 17:40
working kind of like in the real world.
- 17:43
uh it has access to real data. If I
- 17:45
scroll up, I'll show that um
- 17:48
if uh you know this is my cloud code and
- 17:52
it found it it got the Gmail, it got the
- 17:55
notion doc, it found the spec and it's
- 17:57
going to to implement it. Um
- 18:00
but yeah, so to sum up, I think that
- 18:03
agents working on the canvas is so cool
- 18:05
and I think that there's like so much we
- 18:06
can do if we use like the agent the
- 18:08
canvas as a a place to work with agents.
- 18:11
And I think the place part of it is
- 18:13
really important because you know when
- 18:15
we do you know with remote work
- 18:16
collaboration we do a lot of stuff
- 18:18
online with each other and we
- 18:20
collaborate with people on the canvas
- 18:22
and I think that the yeah the canvas can
- 18:24
be a place where we uh collaborate with
- 18:26
agents and I'm I'm I'm I'm vamping
- 18:28
because I'm trying to see if this is
- 18:30
finished but I don't think it's going to
- 18:31
finish. Um, but thank you so much
- 18:49
>> [music]