Transcription: OpenAgents Episode 073 - Agent Builder UI

June 9, 2026 ยท View on GitHub

Source: https://twitter.com/OpenAgentsInc/status/1757111834857926954 Wiki source: https://raw.githubusercontent.com/wiki/OpenAgentsInc/openagents/Video-Series.md Media title: OpenAgents - Episode 073: Agent Builder UI We review an interactive mockup of our ... Upload date: 20240212 Transcription model: mlx-whisper/mlx-community/whisper-tiny Generated at: 2026-06-01T19:05:25Z

Machine-generated transcript. Review speaker labels and wording before using this as quote-grade source material.

[00:00] Christopher David: Happy Bitcoin 50k. Let's take a look at some UI improvements. We've got here so I can log in

[00:07] Christopher David: I'll get up

[00:11] Christopher David: and then

[00:14] Christopher David: Okay, I'll list my agents

[00:18] Christopher David: So contextual inferenceer

[00:21] Christopher David: We're gonna call this Connie contextual inferenceer. Connie codemoker. All right

[00:26] Christopher David: So this is our sort of like very basic mockup of the agent builder UI

[00:33] Christopher David: And right now if I click on the three plugins one two

[00:39] Christopher David: three I did define these in a

[00:45] Christopher David: Cedar called Connie cedar

[00:50] Christopher David: But we'll get it working also

[00:52] Christopher David: That I can create all these plugins via the plugin create form

[00:58] Christopher David: Which is not fully

[01:00] Christopher David: Connected now

[01:02] Christopher David: But that's where that is look a nice

[01:09] Christopher David: I would let's think about this so

[01:17] Christopher David: I think eventually we'll get back to the idea

[01:21] Christopher David: We were working with previously this agent graph where you can kind of build your you know the whole idea is your your building an AI agent workflow

[01:29] Christopher David: via these nodes like a graph of these nodes

[01:32] Christopher David: That's when we were thinking of doing it in React and inspired by like graph and level

[01:37] Christopher David: There's actually like a whole bunch of different people doing this basic idea. I do think we're gonna do our own version of that

[01:45] Christopher David: Maybe from scratch

[01:48] Christopher David: Probably not using React but what I have here is just a very basic

[01:54] Christopher David: Flow we using vanilla JavaScript that when I click this

[01:59] Christopher David: It'll add it to here that can click remove

[02:04] Christopher David: So let's make maybe a list of what's missing from here

[02:09] Christopher David: I've got a little scratch pad here

[02:14] Christopher David: So what

[02:17] Christopher David: Missed I

[02:19] Christopher David: Want to button to be able to click to run the flow

[02:29] Christopher David: And given a user input right you got a feed user input into that

[02:39] Christopher David: Extract URLs from a string so the idea is that

[02:43] Christopher David: The types of things that I would put into chatchipyT where I'm like putting in the message

[02:48] Christopher David: And saying

[02:50] Christopher David: Get the code from this link or read the doctrine is link

[02:54] Christopher David: It takes that prompt and then feeds it through this process and gives me a infiltration all at the end

[02:59] Christopher David: So in a button to click to run the flow I

[03:05] Christopher David: Might want to be able to test individual steps

[03:10] Christopher David: That's

[03:15] Christopher David: Maybe lower priority and

[03:19] Christopher David: Then one of the things I'm gonna need is

[03:23] Christopher David: Right now we have it such that the URL extractor plugin returns in array of strings

[03:34] Christopher David: But URL scraper expect a string and I was thinking like we could make it

[03:39] Christopher David: Such that this expect an array of strings just it would pass easily from one to the other

[03:43] Christopher David: But I think that would be like a nice

[03:47] Christopher David: Opportunity to build out some conditional logic

[03:50] Christopher David: Like some sort of little block for

[03:56] Christopher David: Looping through so I've got this kind of separated now

[04:02] Christopher David: Into two different sections you've got plugins these sort of like external wasm plugins using X-Tism

[04:08] Christopher David: And then for now just calling them parse blocks is probably a better word for that

[04:14] Christopher David: But array string loop loop through array of strings right now that won't work because that's not associated with the plugin

[04:20] Christopher David: This is just looping through plugins

[04:22] Christopher David: But you can envision that I would want array string loop to somehow go between these two cards

[04:30] Christopher David: I'll loop through there

[04:33] Christopher David: Let's take a quick look at the code of this

[04:37] Christopher David: And then we'll talk about how we're going to approach

[04:42] Christopher David: Implementing

[04:44] Christopher David: More advanced kind of conditional logic

[04:48] Christopher David: So this is in our agent builder

[04:59] Christopher David: So for the JavaScript interactions we're using a library called alpine jss. It's a very lightweight

[05:04] Christopher David: JavaScript

[05:09] Christopher David: Library that

[05:11] Christopher David: Kind of comes default as part of a

[05:15] Christopher David: Fresh layer of elintulation

[05:18] Christopher David: The other thing I did is for some of these login

[05:21] Christopher David: Flows and like the profile I pulled over some of the basic

[05:25] Christopher David: Interactions from a fresh layer of a

[05:29] Christopher David: And then alpine as well

[05:30] Christopher David: And that basically just ask chat you beat it help me build out the

[05:35] Christopher David: JavaScript

[05:37] Christopher David: of this so

[05:38] Christopher David: Let's try and I'm I don't really like no alpine very well, but let's just we can kind of tell what's going on here

[05:44] Christopher David: So when this agent builder screen component initializes

[05:51] Christopher David: It's getting the initial data from this agent builder function and on in it. It's calling in it

[05:57] Christopher David: And then it's also got a handler I guess for

[06:01] Christopher David: When there's an ad block event it calls the ad block function

[06:06] Christopher David: Okay, so let's go down and look at the

[06:10] Christopher David: actual code of this

[06:15] Christopher David: So at the bottom and got script function agent builder. This is the initial data

[06:21] Christopher David: It's just a JavaScript block with

[06:23] Christopher David: Available blocks this should be filled with blocks from server

[06:30] Christopher David: I guess that's if we're like kind of pre-populating right now. We're not doing that selected blocks in it

[06:37] Christopher David: Placeholder for a fetch available blocks from the server and populate available blocks

[06:43] Christopher David: Or call in the blocks now my call at nodes instead but

[06:47] Christopher David: um

[06:49] Christopher David: You know envisioning that you know plugins is really just one type of these things need to be composed

[06:55] Christopher David: But they're gonna be other things that maybe represent conditional logic so

[06:59] Christopher David: blocks or nodes

[07:01] Christopher David: Then we've got ad block

[07:04] Christopher David: This is if a plugin is clicked on yeah, so it's clone the block object

[07:08] Christopher David: Boba give it any guy D and then push it into selected blocks

[07:13] Christopher David: and

[07:15] Christopher David: Then remove blocks so up here somewhere will probably be a loop through selected blocks

[07:25] Christopher David: Yeah, it's got this syntax which I'm not familiar with but it's from alpine so

[07:32] Christopher David: It's a template of

[07:35] Christopher David: Looping through selected blocks

[07:38] Christopher David: Set the key

[07:40] Christopher David: Preach of the blocks we're going to render a little thing and

[07:46] Christopher David: Pass it the index

[07:49] Christopher David: And then we got a click handler on the button

[07:53] Christopher David: For remove block

[07:57] Christopher David: So that function just like that

[08:01] Christopher David: So we've been previous videos already hooked up such that when we have a

[08:10] Christopher David: Flow like this defined as agent having tasks

[08:17] Christopher David: Attask task having steps we can run that so we basically just need to connect that idea of running it and see the output

[08:26] Christopher David: to the UI here

[08:28] Christopher David: Let's go back to our

[08:33] Christopher David: Thing here and just speculate about this a little bit

[08:37] Christopher David: So a button to click to run the flow

[08:49] Christopher David: We need a way to

[08:51] Christopher David: Connect the loop

[08:53] Christopher David: The like array string

[09:08] Christopher David: Bindically to run the flow

[09:11] Christopher David: Away to see the outputs

[09:23] Christopher David: We

[09:27] Christopher David: Previously had a screen for

[09:32] Christopher David: Kind of testing each individual plug in maybe we could pull that functionality into here

[09:39] Christopher David: So like what do I want to be able to do if I see a plug in here I like to be able to pull it here and kind of test it in isolation

[09:47] Christopher David: And that might be what we do first because I'm not going to be able to run the whole flow anyway until we get this

[09:54] Christopher David: Array string piece so we'll do this maybe as like a series of short videos

[10:01] Christopher David: Where we build each piece of this in order

[10:11] Christopher David: So we'll do this first I want to test to I want to be able to run any

[10:18] Christopher David: Individual block

[10:34] Christopher David: We'll call it plug in because you wouldn't run in a racetring loop

[10:39] Christopher David: I guess you could use dummy data for that

[10:42] Christopher David: So see run any individual plug in

[10:45] Christopher David: Like on the graph we can already run any individual plug in via the separate plug in place, but I want to do it on the graph

[10:56] Christopher David: And see it's output

[11:15] Christopher David: So right now these don't save

[11:26] Christopher David: Oh wait to save and load that you will call them the

[11:31] Christopher David: Block flows

[11:34] Christopher David: So

[11:44] Christopher David: So what I think I want to do is do this one first and just like run into the error called like hey

[11:50] Christopher David: That's not going to work because this is exciting a string

[11:55] Christopher David: So to run this individual

[11:57] Christopher David: Plug in have that work. I want to be able to hit a button to try the entire flow

[12:09] Christopher David: And if I put three back to back where it's all strings that it should you know work the entire thing and show the output of each

[12:17] Christopher David: I want to get the error from

[12:21] Christopher David: Having this output be wrong because it needs to be properly typed via this one

[12:27] Christopher David: So I'd support for that

[12:31] Christopher David: And then we'll do save and load

[12:39] Christopher David: After that then we'll just want like a nicer UI for collecting the prompt

[12:45] Christopher David: Because remember I'm trying to replace my

[12:50] Christopher David: usage of chattpt

[12:53] Christopher David: And then

[12:55] Christopher David: I get to have fun

[12:58] Christopher David: Designing something that I actually want to use it today

[13:01] Christopher David: But first we'll get this kind of agent builder UI logic all built out over the next few videos

[13:09] Christopher David: All right, see you soon