Transcription: OpenAgents Episode 159 - Onyx Repo Maps

June 9, 2026 ยท View on GitHub

Source: https://x.com/OpenAgentsInc/status/1889540491143692592 Wiki source: https://raw.githubusercontent.com/wiki/OpenAgentsInc/openagents/Video-Series.md Media title: OpenAgents - Episode 159: Onyx Repo Maps We complete step 1 of our quest: generat... Upload date: 20250212 Transcription model: gpt-4o-transcribe-diarize Generated at: 2026-06-01T06:47:02Z

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

[00:00] Christopher David: Alright, let's do the first step on our quest here,

[00:02] Christopher David: which is given a GitHub issue,

[00:04] Christopher David: build a repo map.

[00:07] Christopher David: Don't even really need the issue right now. We just need the repo,

[00:10] Christopher David: and we're going to build a map from it that we're going to use to identify the relevant files,

[00:14] Christopher David: traverse it, plan the changes,

[00:16] Christopher David: you know,

[00:17] Christopher David: code it up, generate the test,

[00:19] Christopher David: generate a PR.

[00:19] Christopher David: This is the loop that will get us what we call the holy grail of a Genting software development,

[00:24] Christopher David: an agent that can reliably...

[00:25] Christopher David: Turn an issue into a PR and then repeat the process.

[00:29] Christopher David: Okay,

[00:30] Christopher David: so we've got a kind of a basic GitHub auth app via React Native slash Hyperview we mentioned in the last video.

[00:42] Christopher David: And right now this will,

[00:44] Christopher David: let's see, I gotta actually run the server,

[00:46] Christopher David: so cargo run.

[00:50] Christopher David: This is sort of like the mobile version of HTMX called Hyperview. So our...

[00:55] Christopher David: Server

[00:58] Christopher David: works with both um

[01:01] Christopher David: HTMX and Hyperview from a single code base. So I'm gonna log in.

[01:06] Christopher David: I should already be auth still, so yeah.

[01:10] Christopher David: I'm gonna fix that

[01:13] Christopher David: callback situation. But I should be auth now. And here is the

[01:20] Christopher David: list of repos.

[01:21] Christopher David: my most recent repos.

[01:25] Christopher David: So what we want to do is be able to click on a repo and generate the repo map.

[01:33] Christopher David: We're already generating repo maps via CLI for just kind of internal coding and this is great to kind of point the agent at this list of the different functions in the relevant.

[01:49] Christopher David: Files.

[01:50] Christopher David: So it knows where to look.

[01:53] Christopher David: I'm kind of borrowed a lot of that code from Ader. So in episode one fifty six we did um kind of a deployed Ader to a cloud service that we hit via an API, and we've since built our own version of that internally, uh using tree sitter. I think we're still using tree sitter, we might have simplified that out.

[02:14] Christopher David: Anyway, so now we want to instead of just generating repo maps via CLI,

[02:21] Christopher David: we want to hook that up to the app so when you log in with your GitHub and you see your repos, you click a button, you get a repo map for your repo.

[02:33] Christopher David: So that's the goal for this video is to hit that number one here,

[02:37] Christopher David: build the repo map.

[02:39] Christopher David: And for now we will just maybe have the UI show the repo map so we can actually look at it in the mobile app.

[02:47] Christopher David: Okay, so I wrote up a little issue and usually what I'll do is I'll like go talk to open agents and like say,

[02:54] Christopher David: hey, here's the stuff I want you to read, make me a nice issue.

[03:00] Christopher David: pass that to a new version. So the r the issue is implement a repo map generation for individual repositories. And uh actually I think while I'm describing it, we'll say um

[03:14] Christopher David: Ghost all issue six nine three in a new branch then add a GitHub comment to the issue

[03:22] Christopher David: when done.

[03:24] Christopher David: It should be as simple as that.

[03:29] Christopher David: Go AFK. We'll check on that in a second.

[03:31] Christopher David: So we are adding functionality to generate a repo map for individual repositories when selected in the mobile app using the existing repo map generation logic from the CLI tool.

[03:40] Christopher David: Users can,

[03:41] Christopher David: so right now what's implemented in our version 0.2 of Onyx is users can auth with GitHub via mobile OAuth, users'

[03:49] Christopher David: repos are listed in the mobile app via Hyperview,

[03:51] Christopher David: and then repo map generation exists as a CLI tool.

[03:55] Christopher David: Mimetician plan,

[03:56] Christopher David: create a real-time service,

[03:57] Christopher David: blah blah blah,

[03:58] Christopher David: we're extracting the logic from the CLI tool and have the CLI tool use the same thing,

[04:02] Christopher David: real-time service.

[04:03] Christopher David: Add a Hyperview endpoint.

[04:07] Christopher David: For those who don't know about Hyperview,

[04:09] Christopher David: I kind of introduced it in the last video,

[04:11] Christopher David: but hypermedia concept applied to mobile as kind of like this library thing on top of HTML.

[04:20] Christopher David: Um, that's going.

[04:26] Christopher David: Update the rounds, add the HXML templates, update the three bold list view blah blah blah files to modify.

[04:34] Christopher David: Yeah, pretty nice.

[04:42] Christopher David: these are enhancements cash generated blah blah blah and so i like doing things via issues like this because any future agents can always just go back and see kind of what work was done in the different issues something

[04:54] Christopher David: like right now we're going to be passing in like like directing the agent to do actual issues one at a time but that may quickly evolve to just like here's my repo here's my general priorities of like what i want what direction i want you to take it in

[05:11] Christopher David: where specific features I want you to build and then just like go do it and have the agent build the eight the issues themselves and kind of go through you know in accordance with your very high level plan this some kind of agentic loop of giving things a spec and then have it break down into tasks that it then does I mean this is kind of like a very basic agentic loop that everyone for the last two years has been building versions of but I feel like just recently the models have gotten good enough that we can like do this more reliably

[05:42] Christopher David: Still Sonnet seems to be the best for at least the sort of multi-turn function calling like this, like this agentic loop thing here has not worked with anything nearly as good as Sonnet has been.

[05:54] Christopher David: And I can see the cursor people have come to the same conclusion. They say that their devs prefer Sonnet more or less exclusively. However.

[06:03] Christopher David: In experimenting with DeepSeek most recently,

[06:06] Christopher David: I think I've at least kind of scoped out how it is possible to have more of an actionable,

[06:15] Christopher David: digestible context built by smaller models with reasoning like DeepSeek, maybe in conjunction with SONNET, give better results than this kind of flow here,

[06:26] Christopher David: which is pretty much the same flow as cursor agent.

[06:29] Christopher David: let's see what it's got i've completed the implementation of issue six nine three c i love this i love this now i'm going to guess that this has a bunch of like issues and bugs to fix but it'll be cool when that process of like okay you did a good job it's 90 there go to the last 10 you know it should be able to like spin up the environment hit the tests and debug it by itself um sometimes it one shots it let's let's just see so what branch is this on

[06:58] Christopher David: Okay, so let's do get poll,

[07:02] Christopher David: get checkout.

[07:07] Christopher David: Uh first run a cargo check.

[07:12] Christopher David: And so what I could do is um what I had been doing until recently is just throwing all this into um

[07:22] Christopher David: open agents, but I may actually start using cursor just to try that out.

[07:27] Christopher David: further um fix all these i

[07:36] Christopher David: think cursor's agent is too aggressive on the like conversational history pruning

[07:45] Christopher David: so probably trying to conserve tokens on their end whereas this i mean it this is expensive because i'm literally just sending the entire conversation to sonnet

[07:56] Christopher David: I'm not even using caching here and I need to, I should add that but man you can throw a lot, a lot, a lot of tokens,

[08:05] Christopher David: you know like a 30 messages long conversation with a whole bunch of file contents and it'll, it feels almost like magic how good it is.

[08:20] Christopher David: I've not really played around too much yet with the Gemini models,

[08:23] Christopher David: but I think we're going to lean on Gemini 2.0 Flash for the initial analysis for V4.

[08:32] Christopher David: For things like identifying relevant files,

[08:37] Christopher David: we're going to try to just do this with Gemini Flash 2.0.

[08:53] Christopher David: So we'll see how this did.

[08:58] Christopher David: If it feels like it's getting stuck, then I'll try popping over to cursor.

[09:03] Christopher David: A big advantage that cursor has over this andator has over this is that we are making full file edits and they're not. As well as you can just kind of better see what's going on here, you know, you look in this, but it's a little less UI friendly, user friendly.

[09:21] Christopher David: But I love how concise this is like the cursor or sonnet is just too wordy I told ours to be like

[09:30] Christopher David: Concise I probably ends up saving tokens. It helps it get to the point anyways

[09:48] Christopher David: How good is this gonna be

[10:00] Christopher David: I've fixed all the compilation errors. It almost never fixes all the compilation errors in one hit. Let's just try it.

[10:07] Christopher David: Get pole.

[10:14] Christopher David: Okay.

[10:17] Christopher David: If it's down by more than half, we'll usually give it back to it. Okay, fix these.

[10:27] Christopher David: If the errors go down each time, it's a good sign.

[10:43] Christopher David: This is usually when I'd be ship posting on Twitter.

[10:47] Christopher David: Mm-hmm-hmm. Mm-hmm-hmm. Mm-hmm-hmm.

[10:56] Christopher David: Closed a eye coming at you.

[11:49] Christopher David: Let's try it.

[11:59] Christopher David: Error free.

[12:00] Christopher David: Nice.

[12:02] Christopher David: Do my test pass.

[12:06] Christopher David: Do my tests pass.

[12:13] Christopher David: What is this?

[12:23] Christopher David: segments

[12:27] Christopher David: that's weird.

[12:30] Christopher David: Did you change anything related to this? C Y these fail. Okay, um

[12:39] Christopher David: I don't know. Should we test it?

[12:46] Christopher David: There's no way it's gonna work on the first try.

[12:51] Christopher David: Um so let's see what kind of

[12:56] Christopher David: logs I can anything?

[13:08] Christopher David: Okay, so the issue here is that the buttons

[13:13] Christopher David: don't do anything. They might not have known where to look for that, which I think is it in

[13:20] Christopher David: Here repose lists.

[13:27] Christopher David: There's a fragment somewhere here.

[13:35] Christopher David: Maybe.

[13:36] Christopher David: Maybe.

[13:44] Christopher David: Well that just returns the repo.

[13:51] Christopher David: Conceivably, if I pass it the repo map, it should be able to find out where that is by itself.

[14:10] Christopher David: Yeah, one of the downsides is that sometimes with the full file edits, it gets uh bad about overwriting other stuff.

[14:21] Christopher David: Go the yelling into like make sure you know these are full file edits, use the whole page content.

[14:28] Christopher David: Uh but that's something you wanna

[14:30] Christopher David: easy to pull over the code from adder for the more surgical edits similar to cursor.

[14:58] Christopher David: Why is it creating so much stuff here?

[15:06] Christopher David: Server Hyperview Handler.

[15:45] Christopher David: Let's do cargo check again. It changed a ton of stuff, so I'm guessing it broke something.

[15:51] Christopher David: No, it did not. That's nice.

[15:53] Christopher David: How about the tests?

[16:13] Christopher David: Okay, thanks. But now clicking the buttons in the uh repo map list in the app

[16:23] Christopher David: uh do not do anything. They should generate the repo map and return it.

[16:31] Christopher David: What's wrong?

[16:53] Christopher David: is a interesting mental model switch to be editing

[16:57] Christopher David: code that shows up in the mobile app in our back-end, but it is also nice to have everything in

[17:06] Christopher David: rust.

[17:10] Christopher David: Let's see what that did.

[17:16] Christopher David: Move the text element inside the behaviour.

[17:20] Christopher David: I'll see if that works.

[17:24] Christopher David: Oh, we weren't doing cargo watch.

[17:39] Christopher David: Okay, let's see what happens.

[18:00] Christopher David: got our repose, and

[18:16] Christopher David: Yeah, it seems to think that there is a

[18:42] Christopher David: I see nothing under

[18:50] Christopher David: updated in the repo map thing. Just empty space.

[18:56] Christopher David: Try

[19:01] Christopher David: something else.

[19:11] Christopher David: No view map button.

[19:18] Christopher David: So one concern with the hyperview is that it seems because it's so new, and there's just not a lot of people using it, the L_M_s are not gonna have as good a training data on it, which bu could could be something that we could remedy through some um fine-tuning

[19:37] Christopher David: slash making good use of the documentation, which is quite good.

[19:49] Christopher David: Ordinarily that sort of like short-term convenience of doing what everyone else does is you know there's trade-off to that.

[19:58] Christopher David: I'd gotten kind of...

[20:00] Christopher David: drawn in by that dynamic and it made it hard to like leave the Vercel ecosystem until

[20:09] Christopher David: now but I think it's

[20:14] Christopher David: not gonna be as big of a problem once agents get better at learning from context that you pass in well

[20:23] Christopher David: there's a button

[20:41] Christopher David: I see a small gray sliver of a button with no

[20:49] Christopher David: text in it.

[20:59] Christopher David: Clicking it does nothing.

[21:35] Christopher David: The behavior should be a child of the view element,

[21:38] Christopher David: not wrapped around the text.

[22:13] Christopher David: Deciding on its own to look at some additional docks. Nice.

[23:08] Christopher David: Did that work?

[23:27] Christopher David: I see a button.

[23:31] Christopher David: It's clickable.

[23:46] Christopher David: I click the button, but nothing seems to happen. Make sure we have logging in the right places. Um

[23:57] Christopher David: Unfortunately I feel like I should go look at the button.

[24:02] Christopher David: What do we call it, repos?

[24:15] Christopher David: Search server hyperview.

[24:20] Christopher David: And there's repos.

[24:35] Christopher David: Is that what we're getting?

[24:42] Christopher David: Text style, it, href action is push.

[25:12] Christopher David: Also note that this button earlier, this button elsewhere in the code shows how a button can work.

[25:23] Christopher David: Try it.

[25:32] Christopher David: It's starting to get slowed down now that I've got like a massive conversation.

[28:00] Christopher David: Test it.

[28:54] Christopher David: Login I_C_ is this.

[29:00] Christopher David: Client side the button looks good, but I see no indication of anything happening after I click it. Try one more time to connect it.

[29:14] Christopher David: Then add a GitHub comment to the issue

[29:19] Christopher David: explaining full status update.

[29:23] Christopher David: Uh,

[29:23] Christopher David: I might pop over to Cursor and see if

[29:28] Christopher David: that can help.

[29:30] Christopher David: That's happened earlier today where both Cursor screwing up, popping over to open agents helped open agents screwing up, popping over to Cursor helps. Just a second opinion of agents.

[31:16] Christopher David: Let's give cursor a try.

[31:24] Christopher David: Read this and debug the comment in the last issue.

[31:34] Christopher David: Chat, is that what I want? Composer's what I want.

[31:40] Christopher David: Read this.

[31:45] Christopher David: Fix the view

[31:50] Christopher David: map button.

[32:24] Christopher David: The round for the reformat view is not properly set up in the router.

[32:42] Christopher David: Let me try to re-apply the edit since it wasn't applied correctly.

[32:47] Christopher David: What?

[32:49] Christopher David: I apologize for the difficulty with the edits.

[33:07] Christopher David: Apologize for the difficulty with the edits.

[34:01] Christopher David: So now I see no change whatsoever, I want to ensure that something on the server side detects the button click and logs as soon as that handshake is made.

[34:24] Christopher David: Try again to edit content headers if you think it's

[34:30] Christopher David: important and if you can't tell me what file to edit and what code snippet.

[35:02] Christopher David: Do I need to say Rust Long is info?

[36:12] Christopher David: Nope, nothing happens when I hit the button. Here's server logs.

[36:44] Christopher David: Then accept all,

[36:45] Christopher David: does that matter?

[37:35] Christopher David: StarChat is not necessarily working.

[38:05] Christopher David: Does nothing and no, the start chat button isn't connected. The login with GitHub button does and logout buttons are connected.

[38:20] Christopher David: Okay, well I'm at least happy that neither cursor's

[38:29] Christopher David: agent nor open agents are getting this smoothly.

[38:34] Christopher David: Probably a skill issue on my part not passing it in the right documentation.

[38:42] Christopher David: Let's try a few more things.

[39:01] Christopher David: Ooh!

[39:02] Christopher David: We have a repo map. Now it pushes to an external URL, but rawful.

[39:11] Christopher David: Do you wanna download a repo map?

[39:13] Christopher David: Uh I mean no, but sure. Okay, um

[39:21] Christopher David: What'd it do? Verb is get. Okay. So yes that did work.

[39:30] Christopher David: And I see ReboMap log. However,

[39:33] Christopher David: it opened a URL in a new tab and it needs to not do that. It needs to navigate just via the hyperview stuff.

[39:57] Christopher David: Ah, now we're getting somewhere.

[39:58] Christopher David: The open URL.

[39:59] Christopher David: Action is literally opening a new URL in the browser instead of handling it within Hyperview.

[40:05] Christopher David: Looking at the logs again, I notice that the working log out button uses action equals replace inner with a target.

[40:15] Christopher David: Sounds okay.

[40:47] Christopher David: Okay.

[40:50] Christopher David: So better, better, better.

[40:58] Christopher David: Oh, you know I should run this in um, wait wait, this is the client side.

[41:20] Christopher David: it works.

[41:23] Christopher David: Uh better but

[41:35] Christopher David: The response H X_M_L_ isn't formatted right. I get error

[41:43] Christopher David: uh

[41:46] Christopher David: X_M_L_ restricted element found.

[41:50] Christopher David: Restricted doc tag found in the response I don't know how to copy that message there.

[41:59] Christopher David: From H_P_ local host eight thousand.

[42:03] Christopher David: Hyperview repo open agents Inc. Open agents. Repo map. Github I_D_ equals yada.

[42:13] Christopher David: I_D_ equals yada.

[42:20] Christopher David: Ah, I see the issue. When using action replace we can't return a full dock element, we need to return just a fragment that will replace the target element.

[42:27] Christopher David: Let's modify the repo map handler to return just the content portion.

[43:05] Christopher David: Oban agents.

[43:07] Christopher David: Repository

[43:10] Christopher David: map?

[43:19] Christopher David: Uh

[43:31] Christopher David: Style, title, style, content, okay.

[43:33] Christopher David: Um better

[43:38] Christopher David: no error, but

[43:44] Christopher David: I can only see the title and no content.

[43:49] Christopher David: It's a black background, so make sure content is white.

[44:44] Christopher David: Got to put a loading indicator there.

[45:29] Christopher David: Yeah.

[45:58] Christopher David: Why don't I see anything?

[46:09] Christopher David: I also don't see the back to repos thing.

[46:20] Christopher David: I still don't see any of the text of the repo map.

[46:23] Christopher David: Nor do I see the

[46:27] Christopher David: back to repos button. What's going on?

[47:20] Christopher David: This is the year of coding agents,

[47:22] Christopher David: people. This is the year.

[48:03] Christopher David: Oh yeah.

[48:07] Christopher David: Okay, we got it. Um I'll make it white.

[48:15] Christopher David: Uh thanks that works, but make it white. And can you preserve line breaks. 'Cause it mashes it all together.

[48:26] Christopher David: Okay, so we have um

[48:30] Christopher David: A repo map going to

[48:35] Christopher David: the app.

[48:37] Christopher David: Not super compelling by itself, but that's step one that enables uh the next step.

[48:46] Christopher David: Yeah, uh, eh this has build a repo map from the issue. We're we're mapping the repo itself. Um and I think I actually prefer to think in terms of the repo

[48:55] Christopher David: Uh because

[49:00] Christopher David: the agent with the repo context should be able to make changes outside of the context of any given issue. Uh should be able to make holistic judgments about where you're going, read multiple issues,

[49:17] Christopher David: so we may end up starting it by pointing it at an issue, but anyways, building repos repo-level understanding is the first thing.

[49:27] Christopher David: Reality did that work, and let's try a different repo.

[49:34] Christopher David: We looked at open agents. Let's look at Onyx.

[49:38] Christopher David: View map.

[49:42] Christopher David: That didn't make it white, but license,

[49:45] Christopher David: blah, blah, blah, class,

[49:46] Christopher David: agent graph.

[49:47] Christopher David: Yeah.

[49:49] Christopher David: Can I do that also for open agents?

[49:57] Christopher David: interesting and put it down there oh cuz they're like still gotta care about the little HTML selector do hickey I'm not gonna worry about that right now one

[50:08] Christopher David: more time one more time give me the map give me the map of open agents give me the right the map of your own repo think about your own code agent

[50:25] Christopher David: Step one of our quest is complete, I'll push this into a PR and we will do the next one via probably Gemini in the next video.

[50:34] Christopher David: See ya.