Brought to you by Michael - take a Talk Python course and support the show

#485: Creating memories

Published Tue, Jun 23, 2026, recorded Tue, Jun 23, 2026
0:00
00:38:20
Watch this episode on YouTube
Play on YouTube
Watch the live stream replay

About the show

Sponsored by us! Support our work through:

Connect with the hosts

Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Tuesday at 7am PT. Older video versions available there too.

Finally, if you want an bonus digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.

Michael #1: Backup Docker volumes locally or to any S3

  • Via Bryan Weber (thanks Bryan!), who spotted it over on Virtualization HowTo. Find Bryan at bryanwweber.com.
  • offen/docker-volume-backup is a lightweight companion container that backs up the volumes your apps actually depend on, then ships them somewhere safe.
  • It's tiny: written in Go and about 25MB compressed, roughly 1/20th the size of the shell-based image (jareware/docker-volume-backup) that inspired it.
  • Drop it into your docker compose file as a backup service, mount the volumes you care about as read-only, and you're off.
  • Push backups to a pile of destinations: a local directory, plus any S3, WebDAV, Azure Blob Storage, Dropbox, Google Drive, or SSH-compatible target. Mix and match as many as you want in one run.
  • Recurring cron-style backups in a Compose setup, or one-off backups straight from the Docker CLI.
  • Production-friendly touches worth calling out:
    • Rotates away old backups so you don't quietly fill the disk.
    • GPG encryption for your archives.
    • Notifications on finished and failed runs (so you find out about failures before you need the backup).
    • Stop a container during backup for a consistent snapshot using a simple docker-volume-backup.stop-during-backup=true label, then auto-restart it.
    • Run custom commands during the backup lifecycle (great for a database dump before the file copy).
    • Docker Swarm support, plus arm64 and arm/v7 builds. Hello, Raspberry Pi homelab.
  • Fun aside from Bryan: he searched our back catalog for this tool and the search came back so fast he thought it hadn't run. Love to hear it.

Calvin #2: Pyodide 314.0 Release

  • PEP 783 is the real news — Pyodide maintainers used to hand-build 300+ packages. Now anyone can publish Pyodide wheels to PyPI with cibuildwheel.
  • The version jump from 0.29 to 314.0 is intentional — it now tracks the Python version, so 314.x = Python 3.14. Binary compatibility is locked per Python cycle, meaning packages you build today won't break on the next Pyodide release.
  • sqlite3, ssl, and lzma are back in the default stdlib — no more await pyodide.loadPackage("sqlite3"). Bigger download, but a much smoother experience for newcomers.
  • bigint precision bug is fixed — values above 2^53 were silently losing precision when crossing the Python/JS boundary. The new JsBigInt type makes the roundtrip correct. Worth flagging if anyone is doing numeric work in a browser app.
  • Experimental TCP sockets in Node.js — you can now connect Pyodide to a real database (MySQL, PostgreSQL, Redis tested) when running server-side. Blurs the line between "Python in the browser" and "Python runtime anywhere Wasm runs."

Michael #3: nb-cli: A Command-Line Interface for AI Agents and Notebook Automation

  • From Piyush Jain (Jupyter and LangChain maintainer) on the Jupyter blog: nb-cli: A Command-Line Interface for AI Agents and Notebook Automation.
  • nb-cli is an experimental, Rust-based CLI to read, write, execute, and search Jupyter notebooks. The premise: agents are great at CLIs but terrible at hand-editing the nested JSON in an .ipynb, so let them operate on the notebook from the outside instead of running inside it.
  • Works with or without a Jupyter server. No server? It reads/writes .ipynb files directly and talks to kernels over ZeroMQ. Connected to a live JupyterLab, your edits show up instantly via Y.js (the same CRDT Jupyter uses).
  • Smart output format: instead of token-heavy JSON or ambiguous plain markdown, it uses @@cell / @@output sentinels with inline metadata. Less wasted context, unambiguous structure, and it degrades gracefully on truncation.
  • The payoff is composability. "Add a summary section and run it" becomes one shell pipeline instead of six agent tool calls. And nb search notebook.ipynb --with-errors returns only the failing cells, so the agent skips the cells that worked.
  • Claude Code tie-in: it ships as an agent skill. npx skills install jupyter-ai-contrib/nb-cli and your agent can drive notebooks via nb.
  • Out of jupyter-ai-contrib, which aims to become an official Jupyter AI subproject. Still early (crates.io is at v0.0.5), so kick the tires before anything load-bearing.
  • See also marimo-pair.

Calvin #4: Hindsight Agent Memory That Learns

  • AI agents forget everything between sessions — Hindsight gives them persistent memory that learns over time
  • Simple three-method API: retain(), recall(), reflect() — store, retrieve, and reason over memories
  • TEMPR retrieval runs semantic, keyword, graph, and temporal search in parallel for accurate results
  • Automatically consolidates related facts into durable observations instead of piling up duplicates
  • pip install hindsight-all runs the entire server in-process; integrates with LangChain, LlamaIndex, Pydantic AI, CrewAI, and more

Extras

Calvin:

Joke: Oh Babe…

Episode Transcript

Collapse transcript

00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to

00:05 your earbuds. This is episode 485, recorded on Tuesday, June 23rd. I'm Calvin Hendryx-Parker.

00:12 And I'm Michael Kennedy.

00:13 Thanks, Michael, for being here with me today. I'm excited to be your co-host for Python Bytes.

00:19 We've got a lot going on. We're going to dive right in. But first, make sure you go check out

00:26 our sponsors. It is sponsored by us in our work.

00:29 Michael's great work over at the Talk Python courses.

00:32 So check out Talk Python's coursework over there.

00:35 And if you are in the Midwest tomorrow, since this does go live today,

00:41 AWS Community Day Midwest is tomorrow, June 24th in downtown Indianapolis.

00:46 Six Feet Up is sponsoring and there'll be two Sixies presenting.

00:49 So you've got, that's actually what Six Feet Up people refer to themselves as.

00:54 So if you want to come check out two of us presenting at the conference tomorrow, check that out.

00:58 If you want to connect with the hosts, you can find Michael and myself at all the various social spots on Mastodon, Bluesky.

01:06 Do you still use X?

01:08 I do still use X.

01:09 And I updated our show notes template so that we have our X links and LinkedIn.

01:14 Perfect.

01:15 Yeah, because I'm probably a little more active on LinkedIn.

01:17 But maybe this is a nudge or a motivation that I should go be active over on the other platforms too.

01:22 And you can check out the show on Mastodon and Bluesky at those various links.

01:26 And X there as well.

01:27 So join us on YouTube for the live version of the show at pythonbytes.fm/live to be part of the audience.

01:35 Usually we record Tuesday at 7 a.m. Pacific, 10 a.m. Eastern for those of us on the East Coast.

01:41 I guess we cover both the coasts, Michael.

01:44 And then older video versions are available there as well.

01:47 Finally, if you want a bonus digest of every week's show notes from an email form, just add your name

01:54 and email to our friends of the show list. And we'll never share that email address with anyone

01:59 else. You'll just get great sets of links and show notes from the team over here at Python Bytes.

02:04 All right, Michael, let's kick it off. You've got the first topic up here.

02:08 And let me tell you, I think this one is going to resonate with you.

02:12 Yeah, I already saw why I peeked at some of the headlines. I was like, this is interesting.

02:16 Backing up Docker volumes.

02:18 So maybe we should do a quick, what the heck?

02:21 What are Docker volumes?

02:23 So if you do Docker a lot, you know exactly what Docker volumes are.

02:26 But Docker's a little bit one of those things like, oh, it seems so complicated, so weird.

02:31 And it's just really different than what I'm used to doing.

02:33 And then you work on the Go.

02:34 That's kind of like Linux, but just in a file.

02:36 You know what I mean?

02:38 But one of the things that is different about Docker is it's very transient.

02:42 It's not quite Nix, that it can't be changed once it's fired up.

02:46 but it's generally ephemeral, right?

02:50 I start up a Docker container, my app or whatever app is running there might write to it,

02:54 but that's right inside the Docker container.

02:56 And then when it goes away, if I restart it, rebuild it, especially,

03:01 then whatever it wrote is just gone.

03:03 Sometimes you want that.

03:04 But say if you want your web server logs to stick around,

03:07 you don't want it.

03:08 If you want your database data to stick around, you really don't want it.

03:11 So there's a lot of times that you want a permanent storage,

03:16 but an ephemeral operated system and code and so on for Docker.

03:20 So what you can create is a Docker volume, which is a managed persistent virtual hard drive type thing

03:28 associated with that particular Docker container.

03:31 And you can move around theoretically afterwards, right?

03:33 But typically you say, okay, my Docker setup, this database server gets a volume for its data, something like that.

03:39 Yeah, that's one of my favorite features of Docker

03:41 is the immutability of the containers.

03:43 And if people respect that, things go a lot smoother generally.

03:47 Yes, exactly.

03:47 Like, well, what I typically do, Calvin, when my Docker doesn't work, I just log into the container.

03:53 And then I like get pulled a new version and just like read.

03:56 No, just kidding.

03:57 This is this is the modern equivalent of change mod 777 across all your files.

04:03 Exactly.

04:03 It's not working.

04:04 That always fixes it.

04:05 Just fix it.

04:06 I just open all the ports.

04:07 It says it can't get to it.

04:08 What's the problem?

04:08 Passwords.

04:09 Exactly.

04:10 So what do you do with those volumes, Michael?

04:14 So you've got to back that data up.

04:16 I mean, unless you just don't like yourself.

04:18 You've got to back up your data because if something goes wrong,

04:21 from a whole host of reasons, things can go wrong.

04:24 You need a backup of your data.

04:25 That's just living in servers, right?

04:27 Yeah.

04:28 Or just computers.

04:29 So a lot of times what you can do is you can run some kind of command,

04:33 like I use MongoDB.

04:34 A lot of these people, I also use Postgres.

04:36 For either of those, there's a command you can run that says backup this

04:39 and like back it up to the host or somewhere like that and then send it off to a encrypted storage

04:45 or something. But if it's just the hard drive, the volume that you want to back up specifically,

04:52 that's way more challenging. So Brian Weber, thanks Brian, sent over this idea called this Rust

05:00 utility called Docker Volume Backup. And the idea is you can back up Docker volumes to in the,

05:07 all the ways I can imagine I would possibly want to back them up.

05:10 So you can back them up locally.

05:12 You can back them up to an S3 bucket.

05:14 And when you say S3, that means not just AWS that you can learn about tomorrow,

05:19 but many of the cloud storage providers have adopted some kind of S3 compatible API.

05:25 So you could back it up to, I don't know, Digitalization or something if you want as well.

05:29 WebDev, Azure Blob Storage, which you probably could just treat as S3 directly.

05:34 Dropbox, Google Drive, some SSH compatible storage, I'm guessing SCP or something like that.

05:39 All those things.

05:40 And how sweet is that?

05:42 So the idea is when you've got a Docker Compose type of setup,

05:47 you can go and add a separate service, right?

05:50 In your Compose.

05:52 And it just says the image is this project, this Docker volume backup,

05:56 and you give it environment files and then it can just back up.

05:59 That's really easy.

06:01 Really, if it's easy to do, you will do it.

06:03 Yes, it's nice, right?

06:04 So you basically just add it as a separate service.

06:08 And then in your ENV, you give it a schedule and a destination.

06:12 And then you're on the ENV settings, right?

06:14 The backup settings.

06:15 You just give it those kinds of things.

06:16 And if you've got a home lab and you've got a NAS on there,

06:18 most NASs have S3 compatible storage.

06:20 So you can keep it all, I'm kind of touting the local first operation again,

06:25 keeping all your data, your data.

06:27 Yeah, absolutely.

06:28 So this thing is super small, written in Go, 25 megs.

06:31 So there was also a Docker volume backup Docker shell based image, and this is 1/20th the size.

06:38 So that's cool.

06:39 let's see, you can set up a cron job in your composed setup, or you can just CLI run it.

06:45 It, this is, this is part of the stuff that I thought was really cool.

06:47 It rotates away your old backups.

06:49 You don't have to worry about that kind of stuff.

06:50 You say like, just keep me, give me a backup every day or for a month, you know, or, or

06:55 something like that.

06:55 And then you move it on.

06:57 local GPT encryption, like at rest encryption of your backups, which I think is super important

07:03 because the last thing you want to do is like, well, I want to make sure I back it up.

07:06 So it doesn't, if things get hacked, it doesn't go wrong.

07:08 And then that actually being the thing that gets stole.

07:11 Get notification on finished infill build, filled runs.

07:14 you can have it stop the container before it does the snapshot and start it back up.

07:20 So if you're doing like, I don't know, a SQL light sort of thing as your storage

07:25 and you don't need that much uptime, you want to make sure it's not in some like half-committed journaling state

07:30 or whatever, you know.

07:32 You can run custom commands during the backup lifecycle.

07:34 That was my next question.

07:35 Can you run a custom command?

07:36 And here's the one that maybe go start going down this list.

07:40 It has Docker Swarm support plus ARM64 and ARMv7, which means it runs on Raspberry Pi Home Labs.

07:47 Oh, that's nice.

07:49 It's hitting all the check marks.

07:51 Yeah, it's pretty calm, right?

07:52 It's all right.

07:54 That's very cool.

07:54 This also gives me a chance to shout out Idlembyte's search.

07:59 So people come over and search for like Docker backup.

08:02 And Brian pointed out like, oh, if you search for volume until today, it came back with no results.

08:08 And he thought it was broken.

08:09 But actually, he said, it's so fast, I thought it didn't work.

08:12 It felt kind of like a rough thing.

08:14 But I actually put a ton of energy into this custom search engine that I built for this.

08:19 If you're interested in what we cover some of them, please check out our search engine.

08:22 And you can even add it.

08:24 Now, this is like next level right here.

08:26 You can add it as a custom search engine to your browser.

08:28 So you just say PB space and search our site.

08:31 So you can have Python bites all the things.

08:34 Actually, I was looking for that this morning.

08:35 Because I was like, did we cover this?

08:36 Have we talked about this in the past?

08:38 So that's super cool.

08:40 Now, that's awesome that they went and looked at your site to see if this thing existed

08:45 and didn't find it and scratched that itch and made that thing happen.

08:49 So very cool.

08:50 Well, speaking of making things happen.

08:52 Before we move on, I just want to give a shout out to Chris out there.

08:56 It says, backing up a volume is surprisingly hard when you think about application state,

09:01 stateful data, restore points.

09:03 Yes.

09:03 So absolutely.

09:04 And this is a really nice option there.

09:06 Yeah, that is very true.

09:08 Like I said, if you make a thing easy to do, it will get done.

09:10 If it is hard to do, it will go into that queue of things still to do.

09:16 All right.

09:16 Well, thanks for that tip on backing up my Docker volumes

09:20 into S3 compatible storage.

09:22 But the next one up here actually is kind of exciting

09:25 because it's not just a release of Pyodide 314,

09:29 which you'll notice a new numbering scheme there going on.

09:32 The real news here is actually the fact that PEP783

09:37 has made this possible.

09:39 The Pyodide maintainers were basically hand building

09:43 300 plus packages for your browser to use Python in the browser.

09:47 So this is all about using Python in the browser.

09:49 If you've ever thought about why do I have to use JavaScript

09:52 to make fun web apps, you can actually use Python

09:55 to do that with tools like Piodide.

09:57 And now that the 783 has actually been accepted,

10:00 you can use cibuildwheel and put wheels, like compiled binary packages onto PyPy

10:06 so that if you write an app for the browser, someone can quickly download and get the latest versions

10:11 of the dependencies you may be including in that application itself.

10:15 So again, I don't know, they may be seeing hopefully

10:18 a surge of browser-based Pyodide packages onto PyPI or PyPI coming up here in the future,

10:26 but that's actually really cool to see that ease of use now.

10:30 And so there's a whole tool chain available to build these packages and make them available.

10:34 A couple other changes that have happened in this 314 release, you'll notice the numbering change.

10:39 There's a version jump from 0.29 to 314.

10:44 that's intentional. Basically, you're going to have the Pyodide version track the Python version

10:49 that it closely matches with. So if you're looking for the 3.12 version of Pyodide, that's the older

10:56 0.29. But moving forward, you'll quickly spot and know which version of Python you're getting when

11:02 you install and use Pyodide in your projects based on the version number of Pyodide itself. So you'll

11:07 get 314 tracks to 3.14.

11:11 So for binary compatibility, it's locked within the Python cycle,

11:15 meaning the packages you build today won't break

11:17 with the next Pyodide release.

11:18 So another big benefit to this piece here.

11:21 They've also brought back in some packages that were taken out of the standard library

11:27 for Pyodide to make the packaging smaller.

11:30 Things like SQLite3, SSL, and LZMA are back in the default standard library,

11:36 which is nice, so you don't have to basically install

11:38 something like SQLite if you're using that in your browser-based application.

11:43 There's some bug fixes and other things in there.

11:46 There's also experimental TCP socket support in Node.js,

11:50 and you can now connect Pyodide to a real database.

11:54 So that's kind of a wordy, if you've got Python running in the browser,

11:57 but you can't connect to a database or to sockets,

12:00 you were kind of limited in what you could do with local storage, for example,

12:03 but now that opens up a wider spectrum of things you can do.

12:07 It looks like they've tested it on MySQL, Postgres, and Redis

12:11 when running on server side.

12:13 So it definitely blurs the lines between Python in the browser

12:16 and Python runtime anywhere WASM runs, which I think is, again, super cool.

12:21 So I don't know, what do you think?

12:22 Are you building some web-based Python apps, Michael?

12:25 I would love a Vue.js-like equivalent or something along those lines built on top of PyScript,

12:33 which can run Pyodide or even MicroPython, which I think would be super neat.

12:37 I built some examples actually when I built a PWA based on PyScript when it first came out

12:43 and that was based on Pyodide.

12:45 And it worked really, really well, but I have not.

12:48 I've not been doing it lately.

12:49 You guys see a lot more variations with all your projects that you work on.

12:52 How about you?

12:53 I mean, we've got some interesting stuff going on

12:55 in the appliance world, but this might actually open the door to,

12:59 again, more of those at-edge applications where connectivity may be limited to,

13:05 I just see a lot of special use cases that open up when you can run Python in the browser.

13:09 I've always wanted Python in the browser.

13:11 And when PyScript came out, what was that back?

13:13 Oh, it's been a few years back now.

13:15 That was exciting and kind of big news, but obviously it was slow in the early days.

13:19 There was limitations, but this, I think this is a big move

13:23 that's going to open up a lot of options for folks to build either embedded applications

13:27 or things that can kind of stand on their own and run at the edge.

13:31 i'm excited i think it's going to offer a lot of interesting uh moves there yeah uh i'm very

13:36 excited about um about wasm i think it's going to be i think it's going to be cool i think it's

13:40 going to be super cool uh now let's continue on you've been talking a lot about tools uh lately

13:46 you've got another one here i never stop we don't stop talking about the tools so i won't talk about

13:51 won't stop exactly i want to talk about the nbcli so this is a command line interface or automation

14:00 people but the primary reason for bullying is ai agents and notebooks specifically the envy

14:05 obviously is for notebooks so this is a jupyter ai contrib project and i'm sure you've noticed

14:12 this calvin but so many projects now have some form of cli as kind of the final integration

14:19 pointer the ultimate integration should be the ultimate integration point yeah i mean the

14:24 motivation allows like well we our agents can't get to our data and it doesn't know the authenticated

14:29 API is too complicated. So what can we just do to make it simple? But it opens up so much more,

14:34 right, to just have a CLI for whatever you're working on. And so, so here's one for Jupyter

14:41 notebooks. And if you do Marimo, like hang tight, I got something there as well. But the idea here

14:46 is that instead of having the agents try to parse the IPYNB files, which are just gnarly JSON,

14:54 especially if like lots of output is in there, you know, it's like there's your actual code and your

15:01 cell definitions, but then there's maybe 10,000 lines of output to the next cell. That's not a

15:06 great place for agents to be working. Right. Right. Context windows are a precious space.

15:12 Exactly. And you're, you're messing with that. And also it's hard for it to actually kind of see

15:18 the ambient variables and stuff like that that are in the kernel. So the idea here is with this CLI,

15:23 you get more direct access to those types of things.

15:27 So let me over here.

15:30 First of all, experimental.

15:31 So heads up.

15:32 It is Rust-based, so it's likely you can see VC funding.

15:35 That's super good.

15:36 But the idea is that it can read, write, execute, and search Jupyter Notebooks and just skip that whole thing.

15:41 It doesn't necessarily need to parse the IPYMB files,

15:45 and it even works without a Jupyter server.

15:48 So it can just talk directly.

15:51 So it works with files directly, And it talks to the kernels using zero MQ, which is super cool.

15:57 And instead of using that token heavy JSON or just markdown, it uses at at cell and at

16:03 at output sentinels with inline metadata.

16:06 So as I said, less wasted context and you compose these things and it even ships with

16:13 an agent skill.

16:14 This is another thing I'm starting to see a lot of and have been working on.

16:17 I should have prepared an announcement on this that I'm not really talking about, but I got

16:20 some stuff over.

16:21 Some skills.

16:22 I got skills.

16:23 So if you want to install this, you can just npx skills install jupyter-a-dash-contrib-nb-cli

16:32 to install it with Claude Code.

16:33 Yeah, I think that's smart because MCP is not the answer to everything.

16:38 I think there's a lot of value in skills and CLI combined together because, again, preserving

16:43 that context window in a tool like this opens up a lot for folks who are doing data science

16:48 and they don't know how to write or want to write an MCP,

16:51 but they're definitely a whole in on AI and agentic and LLMs.

16:54 Yeah.

16:55 And MCPs basically say, hey, AI, here are some tools you can use,

16:59 but they don't set the context of, here's why you need to use the tools.

17:03 Here's the ways in which they work together.

17:05 You know, like you need an agent or a skill.

17:07 You need a skill to kind of set the stage, even if it's an MCP,

17:10 like, hey, you can use all this stuff in the MCP, by the way.

17:13 Makes me think I should improve my skills.

17:15 Okay.

17:15 So I said I got skills, but we'll see.

17:18 there's an article about it by so you check that out

17:23 and if you're a Marimo person I am going to have

17:27 Trevor on from the Marimo team to talk about Marimo pair

17:31 which is a similar not the same idea but a pretty similar idea

17:34 of basically how you get the agents inside the kernel instead

17:39 of just having them work with the files and so on

17:42 so look forward to that over to you

17:45 I like that I like that. The Marimo pair of aspects. I've become a Marimo, like I mentioned in the last

17:50 episode of Marimo fan. Okay. So pairing well with something like that last tool you just mentioned

17:56 is that a lot of agents and a lot of these agentic workflows are lacking the ability to recall memory

18:03 in an efficient way. So this next piece here is actually a tool you can add into your agentic

18:09 workflow to do AI memory. So, and more than just memory, memory that learns. So thinking about this

18:17 memory problem is actually kind of hard. AIs forget everything between sessions, obviously.

18:21 So you're constantly writing project specs, implementation detail plans. You know, those are

18:27 good practices, but wouldn't it be nice if it could remember like last Tuesday when you use this tool,

18:32 this kind of output happened. And maybe in this context, it's actually better to use this other

18:36 tool, but that kind of, that temporal, like using time and associating facts and details together

18:44 isn't something that just a markdown memory.md file is going to help you out with. So there's

18:49 an open source tool called Hindsight from the folks at Vectorize, and they offer a cloud version

18:54 of this, but you can run it locally. You can install it with Python. It's got, I think,

18:58 adapters for all the major like Python, JavaScript, Node, et cetera. But basically what they're saying

19:05 is simple vector search is not enough.

19:07 Even if you had a ChromaDB locally with your documents all loaded into it,

19:11 that isn't enough to solve the problem about what did you do last spring, for example,

19:16 like the example they give here.

19:18 That requires temporal reasoning and not just semantic similarity.

19:21 So hindsight attempts to add in this extra layer of temporal retrieval,

19:28 which runs semantic keyword graph and temporal search in parallel

19:33 to store, retrieve, and reason over those memories.

19:36 So you actually get kind of three main functions.

19:39 There's three, it's a simple API.

19:41 There's just retain, recall, and reflect.

19:44 And then it uses this temper technique to do the search across all in parallel.

19:50 And then it brings it all together and it automatically consolidates the related facts

19:55 into durable observations instead of piling up duplicates.

19:58 So again, preserving that context window, putting in what is most valuable,

20:03 when it means the most to what you're doing, it's probably the next step in memory.

20:08 I think this is, again, a next front that has to be conquered

20:12 is giving these agents better recall and memory.

20:16 I think a lot of people got a little taste of this

20:17 with OpenClaw, but OpenClaw's default memory, I don't think gives you this level out of the box,

20:22 but you could integrate this into your existing OpenClaws.

20:26 It is on GitHub, it's open source.

20:28 You can pip install hindsight all, And that actually brings down and installs the whole server and process includes like a line chain,

20:35 llama index, Pydantic AI and crew AI and more all kind of bundled together into a nice package that

20:42 you can just start using with your Claude Code or cursor or whatever agent you want. You can now give

20:48 it better memory that can actually learn from what you're doing along the way. So I don't know if

20:53 Have you run into memory issues, Michael?

20:56 Especially as we age.

20:57 Oh, yes.

20:58 100%.

20:59 I have my command book app that I mentioned last week.

21:02 Oh, yeah.

21:03 You're all about this.

21:04 It doesn't work as well as Python in terms of agentic stuff,

21:08 but obviously you can do stuff like that.

21:10 But just to give you an example, I had to add a feature to the CLI.

21:14 I've been doing a lot of search work to the CLI for the command book UI GUI app,

21:19 which is weird, but will make sense the next time I talk about it.

21:22 But the way that those things are built is the Xcode project has them linked in the project

21:28 and you don't have to build them separately.

21:30 But the agent, even though it's worked on it a ton of times, is like, oh, I got to figure

21:35 out how to build the CLI.

21:37 I can't find it.

21:37 It doesn't seem to be a CLI project.

21:39 What is going on?

21:40 And it spent like five minutes on this.

21:41 And what are you doing?

21:42 Save a memory that you just build the project this way.

21:45 And he goes, oh, yes, that would be great for next time.

21:48 Right?

21:48 Right.

21:48 It's like having a fresh intern.

21:50 Every hour you start a new thing.

21:52 Every day they show up, they're like, hey, I'm here for my first day of work.

21:55 Like, no, you're not.

21:56 What are you doing?

21:56 You've been here for weeks.

21:58 And so I think that would be great.

21:59 One of the things that I think would be cool would be, and I don't know if you could do

22:03 this, is have it sync across computers because I work on my MacBook and I work on my mini

22:09 and I'm like, I told it to save on my mini.

22:12 But, you know, why is that not part of your somehow part of your account rather than part

22:17 of your, you know, like on my account, it knows that this project is like this, right?

22:21 so this must have files right maybe you could save them to your dropbox yeah well i was thinking that

22:29 after our tools episode from last week i'm really focusing on building out my framework desktop

22:35 machine to be that central place i go um i mentioned tmux last week is my favorite go-to

22:40 tool for basically using mosh and logging into that machine but i think i'm going to switch over

22:44 to zelige if you've tried z-e-l-l-i-j i don't know how you pronounce it these are zelige or zelige

22:50 but having this mental model, this hindsight running over there

22:55 where no matter where I'm out and about or if I'm at my desk or sitting on the couch,

22:59 I'm always actually working off that one machine

23:01 where I've got great local model availability.

23:03 You can talk to it over the network?

23:05 Yeah, talk to it over the network.

23:05 Exactly.

23:06 Well, combining that with the tail scale or I've got the Ubiquiti,

23:12 what do you call it?

23:13 Teleport here.

23:14 Yeah.

23:14 Okay, this is cool.

23:15 I'm standing up on my mini.

23:16 Yeah.

23:17 Yeah.

23:17 I think you put it on one spot.

23:18 So you can see here, the memory bank consists of not just like

23:21 a single markdown file of memories, but it's like middle models, observations,

23:24 memories and entities, chunks and documents, which is important because whole documents

23:29 won't do it for you.

23:30 Sometimes it needs to be able to do that reasoning

23:32 and reflecting and pull those chunks into specific spots.

23:37 And based on, again, I think the key bit here is time,

23:40 a clever name, hindsight.

23:42 In hindsight, time would matter for memory.

23:45 And so I think they've definitely solved this problem,

23:46 which I think is pretty cool.

23:48 So check it out.

23:49 Yep.

23:49 Check it out.

23:50 I'm going to, I'm going to install it on my framework desktop and start using this for

23:53 memory inside of my projects.

23:55 I think it's going to be pretty cool.

23:57 All right.

23:57 Let's head into, let's go to the extra part of the show.

24:02 And I think both of us have quite a few extras here.

24:05 When you want to kick it off, Michael.

24:06 You got your screen.

24:07 Okay.

24:07 Yeah.

24:07 Okay.

24:08 Okay.

24:08 Okay.

24:08 I can do that.

24:09 Yeah.

24:09 Let me, let's see here.

24:10 The first one I was going to talk about, oh my gosh, I've got too many, I've got too many

24:14 things on my screen now.

24:16 That's basically what this, I guess it's about.

24:18 How do you refer to your AI agents when you're talking to them?

24:22 Do you have a term of endearment for them, Michael?

24:26 Not in a personalized way, but I refer to Claude as Claude.

24:30 And I refer to...

24:32 With their name, their branding, their branding.

24:34 Yeah, I refer to ChatGPT as Chat.

24:36 Like, hey, Chat, let's talk about this.

24:37 Or like, hey, Claude, good job on that.

24:39 I kind of like Armin's approach of calling it clanker.

24:42 I think it puts it in...

24:43 Clanker.

24:44 Clanker.

24:44 It kind of puts it in the right spot.

24:45 And when I think about it, I think about this.

24:48 I assume this is the Star Wars reference because in Star Wars, they called all the Trade Federation robot bots clankers as a derogatory term in their case.

24:57 But I feel like it doesn't make it as human.

24:59 And you can yell at a clanker a lot easier than you could if you're yelling at Claude.

25:03 People might get upset about you yelling at something named Claude.

25:06 So I thought clanker was kind of interesting.

25:08 Check that out.

25:08 There's a blog post from Armin about it from a couple weeks old, but I think it's still very relevant to check out.

25:15 So that was my first one. And the next one is everyone has one of these in their office.

25:20 Someone decided to make it more official. Do I not have the, let me grab the link for that one.

25:26 There's a project called Ponytail. And now I've got it open over here.

25:30 I read this article. I know I watched a video evaluating this on YouTube just last night.

25:35 There it is. Yes. So make your AI agent think like the laziest senior dev in the room.

25:40 The best code is the code you never wrote.

25:43 So instead of the, it's kind of the not invented here,

25:48 like our Yagni, like I'm not gonna rewrite my own requests library.

25:53 Make sure you always use the libraries that are available.

25:56 I kind of like, I haven't tried it, but I thought it was kind of clever.

25:59 Less code, less tokens, obviously.

26:02 And you basically can just insert into your code,

26:05 hey, ponytail, browser has this, and put in there like a placeholder of like what you want,

26:10 if you want to date that for example in this case is a date picker so it's like input type date and

26:14 then let your agent figure it out with this uh skill installed to figure out what what um uh what

26:21 dependency it should go install instead of trying to write its own so a lot of times these ai agents

26:24 are going to try and write their own versions of things that probably already exist why would you

26:28 they're very happy to go oh yeah enterprise on you when it's like i just i don't need this is not in

26:34 need of that. It is a very simple project. I just need like a dialogue. So maybe you could just use,

26:40 hey, guess what? HTML is recently has a built-in dialogue thing. You don't need to install React

26:45 just so I can have a dialogue. You know, that's kind of the vibe. All right. The next one is,

26:49 we've been talking a lot about agents, AI, and giving them control over our computers.

26:55 How can we do that in a safe way? And how can we do it for multi-user? A good friend of mine,

26:59 Chris McDonough from the Zope Python clone communities. He has wrote a agentic wrapper

27:07 around all this. So it kind of does containerized sandbox workspaces where you can actually do it

27:11 multiplayer. So check out Dave. I don't believe he's done much fanfare around this project. It's

27:17 very new. Just started a couple of weeks back, but I think it's already made a ton of progress.

27:20 There's already like well over a thousand commits in there from him and a couple other contributors

27:24 into this, but basically use it with Pi or Claude Code, but intentionally given wide permissions.

27:32 So you want to be able to have them read, write, and execute code, but do it in a safe space,

27:37 in its own safely isolated workspace. And then for Teams, you basically, I believe it incorporates

27:44 Tmux in for allowing kind of the multi-user, multiplayer. If you've ever done Tmux with

27:49 multi-user, it's actually kind of magical. It feels like Google Docs where multiple people can edit.

27:54 simultaneously, well, multiple people can be in the terminal

27:58 simultaneously working together.

28:00 And so when you wanna collaborate and wanna be using an agent

28:03 and actually collaborate with other humans, this actually may be a really good option for you.

28:06 It is called Clang, kind of maybe a play on the word clankers again.

28:12 So Clang with the K at the end, how do you pronounce that?

28:15 These projects need to get better naming.

28:17 Clang I don't know.

28:20 Yeah.

28:20 I honestly think when projects are like this and they could be pronounced many ways,

28:23 There should be a little MP3, just like, here's how it sounds.

28:26 How do I pronounce this?

28:27 All right.

28:28 Another one.

28:29 Who's been having struggles with GitHub and their outages recently?

28:33 Well, Cursor has announced Origin.

28:36 It's currently on a public wait list, but it might be something worth watching.

28:39 But it is basically a source control optimized for the agentic world.

28:43 I think they are claiming something like over 22 commits per second support out of the box.

28:48 So if you've got a lot of users going at it with their agents

28:52 and be able to commit at that level of scale, I think this is the future

28:56 and where GitHub better get their act together because it sounds like Cursor's coming for their lunch.

29:01 And the last extra I wanted to cover was performative UI.

29:06 Michael, have you ever wanted to launch your own AI startup

29:11 and you needed to have the right AI components onto the page?

29:14 Oh yeah.

29:14 This is AI native React components for the next you name it.

29:18 So any fancy sparkles, any fancy pills with, you know, status lights in them.

29:25 You can just npm install performative UI.

29:27 I just added a pill to my, one of my websites and I didn't even think that I could use the framework for it.

29:32 Oh yeah.

29:33 Well, so there's, for example, golden eye, the golden eye effect.

29:36 If you'd like to have that, you can, you can get that right out of here.

29:39 I kind of, I kind of don't want to like this, what I do kind of like it.

29:41 I know.

29:41 I was, when I saw it, I was like, oh my gosh, the things, I mean, you, you scroll down through here, they have thought of, well, or

29:48 every possible trope that most of the ai startups are doing uh if you want to have your chat bubbles

29:53 look like they are coming straight out of the existing chat client uh if you want to have an ide

29:59 they've got a mock ide component that you can land in your page to show developers that you're very

30:03 developer friendly so that was a fun one uh that i thought i would share with the group here uh

30:09 michael what do you got in the way extras all right i got it i got a couple of things um by the way

30:13 before I jump over there, it's just, you talked about Armin's article on clinker, clinkers in that

30:18 word. I have gone the opposite direction. And I found it surprisingly makes me feel better working

30:24 with these things is I've gotten Claude to address me in a way more personal way. Okay. So instead of

30:31 going, the user has requested or the project, you know, it refers to me as Michael and like uses me.

30:38 So it'll be like, and Michael already committed this.

30:42 And so we're going to do this.

30:43 And it's because it sounds so silly, but here's the thing.

30:47 I find some, you know, without those kinds of things, like doing a lot of this agentic

30:50 stuff, it's super sterile.

30:51 It's still like working with other people.

30:53 I'm just now working with this thing that like refers to me as user.

30:55 I'm like, I am not a number.

30:58 I am a man, you know, like that's what I feel like.

31:00 I'm going to be worried, Michael, when you start referring to yourself in the third person.

31:03 I know.

31:05 Well, well, well, Michael wants to cover.

31:08 No, just kidding.

31:09 So a really cool Talk Python episode that I released last week, and it will still be the

31:15 live one for a day or two before I release.

31:17 The next one is I interviewed Charlie Marsh.

31:20 Now that Astral has been part of OpenAI for a little while.

31:23 What a journey.

31:24 Yeah, basically it talks about the whole journey he's been on.

31:27 It talks about what does this acquisition by OpenAI mean for the Python community, for

31:33 uv ty rough all those kinds of things so uh i think people if you care about like what is happening to

31:40 uv check this out and you mentioned cursor they're gonna have a little extra money to you know build

31:46 build origin because they just got acquired by spacex or are going to be i mean what do you do

31:53 what do you do with that extra money other than build more stuff exactly you could run a lot of

31:59 agents for 60 billion dollars because that's what they're apparently getting acquired for 60 billion

32:04 dollars a vs code clone oh my gosh wow wow wow wow wow um i was a huge lover of of cursor for a long

32:13 time and never been a cursor user it was not my not my normal toolkit not your vibe no it's i'm

32:19 cli's i know i know see this is why it's good you're here we have different perspectives i love

32:24 of cursor but it's been moving more and more towards just like just fire off a bunch of agents

32:28 that don't even look at what it does sort of that's been it's what it's embracing and the more it does

32:33 that the less like i kind of want to still see what's going on a little bit anyway um also astral

32:39 intersect open ai but this is not the same thing charlie marsh posted i'm proud to announce that

32:44 we're renewing and expanding our support for maintainers of open source projects used across

32:50 Astral and Codex tool chains at OpenAI.

32:53 Today, that starts with committing more than $160,000

32:56 in direct sponsorship through GitHub sponsors.

32:59 Nice.

32:59 So there's the Astral open source fund and so on, and it shows you how to apply.

33:05 So if you want to get, also the Codex open source, a million dollar fund

33:09 that includes six months of ChatGP Pro, API credits, and so on and so on.

33:14 Which have you noticed in Codex, if you're using ChatGPT in Codex,

33:18 it now gives you an option to reset your quota twice.

33:20 Like you get two resets of, oh,

33:23 I messed up and I went over.

33:25 Okay.

33:25 Interesting.

33:26 Watch, keep an eye on tokenomics.

33:28 I think this is going to be the next three months,

33:31 two months are going to be very interesting in the token space.

33:34 I agree.

33:35 And things like, not necessarily endorsement,

33:37 but things like ponytail.

33:39 Yeah.

33:39 In memories and other stuff that keep it more focused are going to become more and more

33:43 important.

33:43 I imagine.

33:44 All right.

33:46 What am I?

33:47 Oh yes.

33:47 I know what I'm talking about here.

33:48 If I go to any of these courses on Talk Python, what is really cool is I can now, I guess I had to log in to show you, which I'm not.

33:57 I won't bother.

33:58 But now every single course at Talk Python training, all 283.9 hours of them have Spanish subtitles, German subtitles, which they always have been there for a little while.

34:14 But the announcement is now Portuguese.

34:16 Every course has full high quality Portuguese transcripts.

34:21 And boy, boy, was that a lot of words to generate those correctly.

34:24 So who QAs those?

34:26 Do you have some folks in the community who are QAing these translations?

34:29 No, I have a whole series of AI agents and Python software that like re-evaluates them.

34:37 And it's just a whole back and forth.

34:40 I was able to QA them somewhat in German because I can speak some German, but my technical German is not great.

34:47 So, you know, somewhat.

34:48 But it worked well for there.

34:49 So I'm just trying to apply the same process.

34:51 We'll see.

34:51 People let me know how they're turning out.

34:53 But I think they're pretty good.

34:54 Well, I'm glad you're making the effort to make it accessible.

34:57 Yeah, exactly.

34:58 I'm thinking, even if they're not perfect, you know what?

35:00 The English subtitles aren't perfect either.

35:02 They were done mostly by humans directly, but non-technical humans.

35:07 So they still need a little bit of fixes here and there.

35:09 That's the challenge.

35:10 right like even if you get a human being to do it then you got to find a human being who both is

35:15 patient diligent and does python which is like really and wants to do transgress this is a very

35:21 rare person i'll tell you what okay a couple more quick announcements uh this one um we've got the

35:27 jango developer survey is out but the analysis in the search for a dsf executive director so

35:35 So boosted by our friend Jeff Triplett out there.

35:39 So they're looking to hire somebody for this.

35:42 And I believe you deserve a bit of a shout out here.

35:46 Hey, look at that.

35:47 Shout out to Six Feet Up, who is one of the key sponsors making this happen.

35:52 Do you want to say one quick word about that?

35:54 You know more than I do.

35:55 Yeah.

35:55 No, I think we're definitely very involved in wanting to be engaged in getting the Django

36:01 Software Foundation and executive director.

36:03 it's gonna be a big move for that group to have that kind of dedicated leadership.

36:07 Right now it's very all volunteer run.

36:09 So things like the conferences are done through another volunteer group called Defna

36:13 and the Software Foundation managed some pieces of it.

36:15 There are some paid positions like the fellows who work on the code,

36:19 but this is working on growing the community.

36:22 And there's a huge tale of people using Django out there

36:26 in the world and they don't know how to give back.

36:29 And I think that's part of this executive director's mission

36:32 is going to be how do they go and find the folks

36:36 who are getting a lot of value out of Django and making sure that that value kind of gets put back

36:41 into the community in the form of sponsorships for the software project itself.

36:44 So we can have more fellows, we can have bigger sponsors at the conferences,

36:49 people can get greater adoption of Django into more places.

36:52 I think there's a lot of behind the firewall usage here

36:55 that this is gonna help bring to light and get more sponsorships.

36:58 So yeah, 6Whip is super excited to sponsor and help find the right person.

37:02 That's awesome, Calvin.

37:04 One of the, I think, key secret sauces of Django is the community.

37:08 So this is right in that space, yeah.

37:09 Yeah, yeah.

37:10 Especially now in this agetic world, right?

37:13 Human contact is even more important than ever.

37:16 I agree, 100%.

37:18 All right, I've got a joke.

37:19 So you got a joke for us?

37:20 You got a joke?

37:21 It's called, oh, babe.

37:22 Oh, babe.

37:23 Oh, this is rough, but it's right on point for what we've been talking about, some of the things.

37:29 All right, hit me with it.

37:30 You talked about tokenomics.

37:33 So this is a screenshot of an iMessage.

37:37 It says, babe, heart, heart.

37:38 $15,000 out of our ticket to go.

37:40 Oh, my God.

37:41 Oh, is this what I think it is?

37:43 Ring emoji, ring emoji, ring emoji.

37:45 Hands over.

37:46 Anthropic PC.

37:47 Invoice from Anthropic.

37:49 $15,000.

37:51 Keep an eye on that token bill.

37:53 I don't think it's going to go down.

37:55 I'm so sorry, but it's not a ring.

37:57 It's just a monthly Claude bill.

37:59 How rough is that?

38:00 It's very real.

38:02 I feel seen.

38:05 All right, Michael, thank you so much for joining us for another episode of Python Bytes.

38:11 We will be back next week with more Python news and headlines right to your earbuds.

38:17 So we'll see you all later.

38:18 Thanks, everyone.

38:19 Thanks, Calvin.


Want to go deeper? Check our projects




Subscribe to Python Bytes