[
  {
    "startMs": 12880,
    "text": "How's everybody doing? Day, what is it? 4, 400 something. Thank you for bearing with us as we had a little technical difficulty getting started. But I am Jeremy Adams. I'm from Neo4j. You might have seen our booth. It's kinda right over that way, and we're all about graphs and graph databases. Today, I'm gonna expand that a little bit to a side project I've been playing with. Uh, who here has done something"
  },
  {
    "startMs": 42680,
    "text": "with, uh, OpenClaw or Hermes Agent, or any of your kinda claw of choice? Okay, so a lotta... Some folks, but most folks are kinda new to the space, which is cool. How about, uh, things that are more like edge devices, hardware, um, thinking about like, you know, offline mode kinda stuff? Yeah, okay, some interest there. Um, how about who's experienced with graph in general? A little bit of graph, some graph"
  },
  {
    "startMs": 72440,
    "text": "people. Cool. And how... Who's been doing, like, building agents with memory and things like that? Oh, okay. Whoa, cool. That's the, the biggest group so far. Uh, and I wanna keep it going. We're gonna try and do more things that have to do with, uh, statistics of some sort, um, as we get to some findings that we're gonna do in a little bit. So, um, what I'm gonna do in this talk today is talk about this agent memory project that I did that involves a bit of hardware that you can see"
  },
  {
    "startMs": 102460,
    "text": "on my chest. And, um, as we go through it, we're gonna talk about how I also built up some software for agent memory, and how that all went. So this is like the livest of the live demos I've done with this so far, 'cause I'm, like, literally assembling the pieces in front of you. So let's see. We're... I have a microphone, little extra microphone. Yes, I'm gonna be using this to talk to my claw in a second. It's not, it's not yet powered on, so this is really"
  },
  {
    "startMs": 132380,
    "text": "crazy. And I've got this, uh, I've got like a capture, a video capture from my HDMI, which is over here. I'm gonna plug that in. Whoa, somewhere. Plug that in. Okay. It's not on yet. I'm also gonna... This is the, uh, receiver for the USB for the mic. So we hope this works, too, today. If I could see where it goes. There we go. Plug that in."
  },
  {
    "startMs": 163360,
    "text": "Guess that's why they made USB-C. You have to keep flipping the thing over. Okay, so there, that goes in. And now, gonna try and sync these two mics. Okay, they're green. That's... Okay, so I got a mic there. Now, for some power. Good old, good old battery power. All right. So, what I'm gonna do really quick, just for fun, before we get into the main presentation, I'm gonna show you this trick. So with this weird video capture situation I've got going on,"
  },
  {
    "startMs": 193860,
    "text": "I'm gonna go over here to my QuickTime Player and I'm gonna say that I want a... I want something that it will not let me do right now. Let me quit QuickTime Player, and let's reopen it. All right, here we go. And let's try and do a f- a new movie recording. All right, we can see... There we go. You seeing the claw? All right. We don't wanna see that. We wanna see what's on the claw."
  },
  {
    "startMs": 223800,
    "text": "So what I'm gonna do instead is I'm gonna use... The source will be from my, from the output of this video here. All right. So let's power it up, and I'll try my best, there we go, to catch it during the boot sequence. All right. So I'm gonna go here to my... I'm gonna change to this USB 3 capture device, and I'm gonna move this around a little bit so we can see it."
  },
  {
    "startMs": 253800,
    "text": "And hopefully, I mean, I can't give you any guarantees, but hopefully what's gonna happen is, as this guy goes, we're gonna see something actually happen. So I'm gonna give a little reset to that and back to that."
  },
  {
    "startMs": 268520,
    "text": "Oh, and let me push power on this. Okay, there we go. All right. So, again, hopefully, I see power is now flowing through into here. Okay, oh, something's happening. Okay. And, um,"
  },
  {
    "startMs": 284340,
    "text": "this gives me high confidence, 'cause I've done this only, like, 1 million times, as you can imagine, hacking on this silly thing. Okay, Raspberry Pi desktop. Oh, yeah. So this is a Raspberry Pi 4B. Not the latest model.  Okay? So, um, but very serviceable. And I was running a 32-bit operating system for a long time until I realized it was 64-bit ARM capable. It's pretty cool. Um, you can't run everything on this thing, but you can run quite a bit. And, um, we're gonna get into"
  },
  {
    "startMs": 313900,
    "text": "exactly what I did put on this to end up getting this presentation t- together. Okay, cool. All right. So it's alive, and I've got a little extra Bluetooth keyboard, and that's how I can drive things on here. And we will do that, um, in a second. But I mostly just kinda wanted to show you the setup so you could, you know, believe that it actually is a real thing. And, uh, there we go. All right. So now I'm gonna get into the presentation. We'll come... Here, there we go. I'll come back to this"
  },
  {
    "startMs": 343980,
    "text": "Pi here in just a second after I open up... There we go. And just to give you a, a, a flavor, uh, this one has NanoClaw, but it also has Docker on here. And I'm running Neo4j  on, on here. I've got a little Docker-based Neo4j database. Okay. Now, let's continue with the talk, and we'll get back to the claw in a minute. So small claw. What did I-- I, I said small claws are beautiful. What did I mean by that? Well, there"
  },
  {
    "startMs": 373904,
    "text": "was a lot of hype happening, and still is, about these personal agents, but I did not want one that was on my laptop. I'm sorry, I'm a little conservative. I come from the old kind of sysadmin, DevOps space. I'm like, \"I wanna wait for this stuff to be really solid before I do something like that.\" But I, I also want it to be cheap, open, hackable, right? And, uh, for me, I wanted to understand what was happening more than it being feature-rich. That was more important to me. And so I went and I saw, like lo-- I live in Portland, Oregon. I looked on Craigslist."
  },
  {
    "startMs": 403864,
    "text": "Somebody's selling a Mac Mini with OpenClaw pre-installed. I'm already like, \"Pre-installed? That's a red flag.\" And you know, Mac Mini could be cool, but, um, I know now it's not gonna be six hundred anymore with the recent price increases, right? So that's not a small claw as far as I'm concerned. So then I reach back and this is, uh, I did-- I think it's pandemic or at the end of the pandemic, I did something where I was hacking with this very Raspberry Pi, doing something like measuring the weight of the dishes in your sink to tell you you"
  },
  {
    "startMs": 433844,
    "text": "should wash the dishes. Anyway, you could check out the video there if you like that kind of nonsense. But that's this exact guy, and I saw it and I said, \"I have this in the closet. Will it claw? I don't know. I should try it and see.\" And, uh, yeah, it claws real good. It was-- and, um, that, that, that little-- that it's not a sticker, it's like more like me, you know, photoshopping a, a, a claw on there that's like, you know, \"Oh, maybe someday I could actually, you know, uh, do something really cool with this.\" And, uh, but you see my old setup. I have"
  },
  {
    "startMs": 463804,
    "text": "this external monitor. I've got my external keyboard. There's a mouse off screen and everything. This guy is a game changer right here. I'm like so-- It's so sleek now. Uh, it's got onboard Wi-Fi, which is great, or you can plug into wired. So hopefully, I'm actually on the network. We'll have to check that in a second. Um, okay. And then addition, uh, I used NanoClaw. So I didn't use OpenClaw. I found this other project that more suited my tastes because it was like"
  },
  {
    "startMs": 493784,
    "text": "fifteen source files, and it was quite compact and small number of lines of code. It just used Docker containers to run the agent processes so they couldn't run amok on the system. I was like, \"Okay, this is my kinda thing.\" So I said, \"I'm going for it.\" Uh, and so, and I like the other boxes it checked for me. I could run Linux on here. It's got Docker, I understand. Uh, it, it was based on Claude Agent SDK, NanoClaw is. And they could-- And they actually encourage you, modify it, use Claude Code, we got skills"
  },
  {
    "startMs": 523804,
    "text": "in there, hack on it, make it work for you. And it used messaging like, you know, Telegram if you want. Uh, but I was like, \"Well, I had WhatsApp on my phone, so I'll just use WhatsApp.\" Perfect. So the initial architecture was something like this. To go from my iPhone, uh, or my MacBook, WhatsApp, you know, and then go through and talk to NanoClaw on this Raspberry Pi. That's it. And you just had to get like a credential. You go on the NanoClaw and you get it to register. So now you know WhatsApp's in the cloud, and this thing can pull messages down from it."
  },
  {
    "startMs": 554144,
    "text": "And of course, you know, onboard, I say we're using Claude stuff in the background, so you got all the power. There's no inference, no LLM inference happening on this thing. I am using the claw-- uh, the, the cloud for all that. So I've got a big brain, though it's over, over a wire to the cloud, right? But then, uh, I said, \"Well, what could I do with this?\" You know, uh, I, I've got also in the claw, uh, uh, in the cloud, I also have Neo4j. I've got Neo4j database up there. And for the folks here that have never done graph before,"
  },
  {
    "startMs": 584224,
    "text": "this is your Graph 101. There is a small graph, and this is a graph. Can you see which ones are the nodes? Right, the round ones. And you see the relationships, the edges between them. So there's two person nodes and a movie node. And Tom Hanks, the person, acted in Forrest Gump, and Robert Zemeckis directed it. Pretty easy. That's it. Now you know graphs. So I asked in a WhatsApp message, uh, once I had this database full of movies and I had my claw connected, I'm like, \"Hey, tell me"
  },
  {
    "startMs": 614024,
    "text": "what movies Tom Hanks acted in.\" And it went through there with an MCP server connecting into my Neo4j instance with the movie database in there, right? And then it responded back to me. It's like, \"Oh, well first, your stuff's not set up right. It's broken.\" I'm like, \"Oh, okay, let me fix it.\" So I got on the claw, made sure auth, auth was working, and then I got a bunch of results back on the right there. And those all came right out of pulling data from the database, feeding it back up through the Claude Agent SDK, forming a"
  },
  {
    "startMs": 643624,
    "text": "response, and sending it back through the WhatsApp channel. Got it? So then I was like, \"Well, what else could I do with this?\" And I'm on the airplane, and I found that even without paying for Wi-Fi, I could use the messaging stuff, and WhatsApp was working. I was like, \"Oh my God, I could talk to Claw right now.\" So I s-- was like, \"Hey, could I do memory?\" And I said, \"Well, I, I'm not exactly sure what I want,\" but I was reading blog posts about this thing called POLE+O. So this is a way of doing memory where you just think of like"
  },
  {
    "startMs": 673144,
    "text": "person, object, location, event, uh, uh, and organization, right? And it's, this actually came from the European policing. And you know, those folks have been drawing graphs for a long time, and every, every one of your favorite cop shows that does a, a string diagram, right? And so then I just was on the plane, I'm like, \"Hey, could we build a memory system using POLE+O?\" And then it's like, \"Yeah, sure. Yeah, we can do it. I'm gonna write a skill for that right now. I've got this mount point, it'll persist even when you reboot me, no problem.\" I was like, \"This is amazing.\" And so now I"
  },
  {
    "startMs": 703084,
    "text": "have this thing where I've got Neo4j in the cloud. I've got this new memory database with this super advanced schema, memories and related things. Very car-- early, you know, before Carpathies, you know, wikis and be-- a-after Obsidian, but you know, you get the idea. It's, it's that kinda thing. And this is what ends up being in Neo4j. Memory nodes that show like places I was going, and as I went to do little DevRel events, I was having this thing record it for me and all that. So then we can like actually jump in and look"
  },
  {
    "startMs": 733024,
    "text": "at this database. So I'm gonna go over here to, um, to the web browser, which I'm already in, but I'm gonna go over to this other tab. And over here I've got Neo4j Aura, and I've got this demo instance. I'm gonna connect to it in query, and this is where I've been storing all this information kinda over time. And so I'm gonna jump in and show you the memory nodes. I got a bunch of stuff. It's kind of a little bit of a dumping ground in here, I admit. And, um, here's all the--"
  },
  {
    "startMs": 763063,
    "text": "here's the memories. So he-- these are those original memory types that I had in here, and I actually wanna show you the memories. I wanna show you all the memories, uh, as they're connected to other things, and I'm gonna run that. So you can see more like the connected graph, and as I zoom in on this thing, you can see there's like me going to-- there's, you know, talking to a person, going to the Snowflake office in Menlo Park. Menlo Park is itself a location in that framework,"
  },
  {
    "startMs": 793004,
    "text": "and then I was at a certain AI meetup event, right? So it follows, and there's people in here like Rebecca, like Jeremy. There's different people, right? So this is one way of doing it. So then going back over here, we see that we can definitely store memories. Well, what else I was thinking can I fit on this physical claw? And somebody was doing like they had a microphone out their window, and they were recording all the bird song in the backyard, and they could... Uh, there was a BirdNET model that sh- that could"
  },
  {
    "startMs": 822984,
    "text": "tell you that. And I was like, \"Oh, whoa. I wanna do that.\" And then I was like, \"Oh, wait, or maybe I could do voice-to-text. Is that possible?\" So then I was like, \"Sure enough, let me hook up a USB microphone, right, and do something like that, and then do some voice-to-text and, and do something like that.\" So, um, and just to get ahead of it, just for fun, I'm gonna go ahead and try and use... Oh, that's funny. Oh, there it is. The button fell off. So I, I made this button, and it's connected into, into some"
  },
  {
    "startMs": 852944,
    "text": "pins. This is me getting ahead a little bit, but just in the interest of time, I'm gonna go ahead and plug this back in. And what this allows me to do is trigger that model, and I'm gonna do some r- quick recording. I'm saying, \"I am actually on stage at AI Engineer World's Fair delivering the talk I've been preparing for,\" right? And so I-- you see these little lights went on, so it did some recording. Hopefully, we'll be able to look and see if we actually-- if I'm actually online, if we got a message and so forth. But this is the dream, right? And"
  },
  {
    "startMs": 883004,
    "text": "I started doing it with all sorts of microphones, playing around with it. And then I was like, \"Oh, I wanna bring this to AI Engineer, and I wanna like walk around, right? And with these recording little LEDs on it, and I wanna like record something. I don't know what I wanna r- what I wanna record.\" And then I was like, \"I know what I'll do. I'll go booth to booth, and I'll record what messaging people have up at their booths.\" And then I was like, \"Let me build this thing.\" And then I actually started working on, you know, adding in that kind of capability for recording."
  },
  {
    "startMs": 913124,
    "text": "And then I was like, \"Okay. Well, the booths, they got numbers and names. Okay, I have to map this out.\" So I was like, \"I'm just gonna like create a very simple data model. It's just exhibitors.\" And they're not even connected. They're just there in the database. So I tried to get as many as I could, and there was some data cleaning to do. And now then, then, uh, I was worried. I was like, \"Oh God, conference Wi-Fi is terrible typically, so I need like an offline mode.\" So then I had this other thing. I put Neo4j running on here, and then I was like, \"Well, I, I could have this"
  },
  {
    "startMs": 943104,
    "text": "thing so if I'm offline, it'll use some regexes and stuff and parse out of the audio voice-to-text the booth number, and maybe it can write a query to insert it in this local database.\" And, you know, again, if this, if this thing is, uh, if this thing is up, which I, I-- at this point I'm not even, I'm not even sure, um, we're gonna try Cypher, uh, my Cypher Shell Browser. Oh, I should spell it right. Let's go Cypher"
  },
  {
    "startMs": 973924,
    "text": "Shell Browser. So this is like a little program I wrote to talk to Neo4j databases without a very expensive GUI and things like that, and I should be able to match all my exhibitors and return those. So this is talking to the database that's running in here around my neck, and as I go in here and I look, I could say, \"Oh yeah, there's Microsoft, MinMax, CAI,\" right? And so this is me, and I had on these like my raw notes. It's like, oh, this is like the raw notes that I took. \"I'm at this"
  },
  {
    "startMs": 1003864,
    "text": "booth,\" and blah, blah, blah, right? So I-- and I took that data, and then I uploaded it later up into Neo4j in the cloud. And in the cloud, um, it looks a little bit different 'cause I've now enriched it. And so if we look at this... Let's see if I can just move back into Neo4j for a second. In here, I'm gonna look for exhibitors, right? And here are my exhibitors. And the exhibitors,"
  },
  {
    "startMs": 1033904,
    "text": "I can click on one, and you can see they're actually connected to something else. So I did load all their data in, so here's, you know, got the notes all cleaned up now on them. But you'll notice that these other things they're connected to, and the things that they're connected to is, I'm gonna put in here, they're connected to all sorts of other things. And I'm gonna put a path through them and return the path, and we end up with something like this. This shows how they're"
  },
  {
    "startMs": 1063864,
    "text": "all connected to some other the- theme nodes. So at some point, I figured out, oh look, there's some themes that exist here, evaluation and observability. Buildkite has that theme. LangChain has that theme, right? So I, I was like, \"Okay, I've got-- I've actually generated some knowledge that was maybe novel that maybe nobody has any,\" right? So are there themes? Yes, there are themes. So these, this is the data dump that I collected by walking around the booth and figuring out what the themes"
  },
  {
    "startMs": 1093924,
    "text": "were. So there's a whole bunch out there and, um, I know I'm just about at my time. The thing, uh, I will point out for folks that are interested, uh, in talking more, I did subsequently upgrade the agent memory that I have using the Agent Memory Service. Basically, I wanted to load all of the WhatsApp messages that I ever had in, uh, it's been a while I've been talking to it, as you see. I wanted to upload all of those in there and see if I could get some kind of insights out of those."
  },
  {
    "startMs": 1124084,
    "text": "And sure enough, I used this Neo4j Agent Memory Service, and if you log into this sort of thing, at some point I just connected it up, and that allowed me to get a whole bunch of memories from the conversations, and then it, it distilled them out. And you can see here that, uh, I've got all these different things, these conversations that I've had and so forth, and this will allow me to browse those memories and, um, for example, all the people I've spoken"
  },
  {
    "startMs": 1154024,
    "text": "to or the locations, the concepts, whatever. So this-- these are all the things that I've been doing, talking about with my claw, and they're all distilled out into memories that are now accessible via an MCP server from this very claw. So anyway, that gives you some flavor of how this stuff works. Please come see us at Booth P3 over there. I can tell you a lot more. If you're just getting started with Graph, you can go to GraphAcademy, which is this link right there, and we've"
  },
  {
    "startMs": 1183904,
    "text": "got all these hands-on courses. It's all totally free to use. So please either, uh, visit us there or, even better, at the booth. Thank you so much."
  }
]
