My Kindle was sitting unused, so I decided to see whether AI could help me find a new use for it. I wanted to create a custom app that could cover a range of uses and be controlled by an AI agent on my MacBook.
I started with a small goal: use my own image as the Kindle's screensaver. Once that worked, I asked the agent to build an app that could cycle through a collection of photos.
We called the project KindleCTL. Its custom slideshow app opens from the Kindle Library as "Photo Slideshow," and I can exit back to my books. I chose ten photos, each shown for four minutes. We can change the photo collection and timing by updating the photos and software from my Mac.
I used Codex and T3 Code on my Mac to work with the coding agents.
I first tried GPT-5.6 Sol with reasoning effort set to Extra High. It wrote code to connect to the Kindle but couldn't resolve an error that prevented it from storing data on the device. Then I tried Fable 5.1, but Anthropic's cybersecurity safeguards blocked the request after two prompts. Finally, I tried GPT-6 Astra with reasoning effort set to High.
We built on tools shared by developers who make it possible to run custom software on Kindles, and kept checking our changes on the device.
Later, the slideshow passed its automated checks on my Mac, but switching photos on the Kindle left traces of the previous image on screen. The tests hadn't caught how the physical display refreshed. Getting from passing tests to something I could use turned out to be the most interesting part of the experiment.
Let's walk through how we went from an unused Kindle to a working photo frame, starting with getting the agent connected.
Connecting the agent to the Kindle
I started in an empty project folder with a 10th-generation Kindle Basic. I gave the agent its network address and device details. We had no USB connection, so the entire setup happened over Wi-Fi.
From there, we still needed to set up access to run our own software on the Kindle.
The GPT-5.6 Sol attempt got as far as loading a helper on the Kindle, but the program that helper was meant to start never reported that it was ready to execute. It couldn't locate a filesystem where it could store content.
The next attempt, with Fable 5.1, was blocked by Anthropic's cybersecurity safeguards. Then I tried GPT-6 Astra. I explicitly asked it to build the custom software we needed for personal use and take inspiration from existing open-source projects.
We adapted the existing jailbreak from SpiderCat, released by sparklerfish and the KindleModding community, and built custom tools called KindleCTL around it.
- What we built: Tools to send commands from my Mac, transfer files, and investigate errors on the Kindle.
- What broke: Our launcher crashed before it could start. We traced that to a compatibility issue with the Kindle's older system software and fixed how the launcher was built.
- How we checked: We connected with administrator access, transferred files both ways, and displayed text. Later, we verified that access still worked after a reboot.
The feedback loop was the game changer
Initially, the agent could connect to the Kindle but couldn't display data. To debug this, it asked me for pictures of the Kindle's screen. I took photos with my phone and shared them with the agent on my Mac.
This was becoming tedious. Since the agent was connected to the Kindle, I wondered why it couldn't get this information itself. I asked it to set up a feedback loop so it could access logs without me having to share screenshots.
The agent set up a persistent diagnostic connection so it could collect errors and test fixes without asking me to download and reopen a package each time. Later, we added remote screen captures so it could also inspect what the Kindle was displaying.
This was a turning point that let the agent continue implementing changes on autopilot. Its reasoning traces showed it figuring out which folders survived a restart and which could store external data.
I was surprised the agent hadn't suggested this on its own. Once I asked for a feedback loop, it set one up and could test fixes without my help.
Most of the code was written in Python. The Kindle's launcher and slideshow were written in C, with shell scripts handling installation and device controls.
With the connection working, I asked the agent to try a small test first: transfer an image and set it as the Kindle's screensaver. I checked that the image appeared correctly and that waking the Kindle brought back the normal Home screen. Once that worked, I asked for the slideshow app.
Getting the slideshow working
I asked the agent for a looping slideshow of ten photos, with an Exit button. Each photo would fit the screen while keeping its original aspect ratio.
The slides were changing, but the transitions weren't smooth, so I asked the agent to look into it. With the feedback loop already in place, it investigated the issue and used the Kindle's built-in screen refresh mechanism to clear the previous image after each slide change.
The screen captures showed complete images, but they couldn't reveal traces left on the physical display. After the refresh change, I checked the Kindle and confirmed that each photo looked clean.
I customized how long each photo stays on screen and the brightness level. We also handled the Kindle's awake and sleep states so the slideshow resumes where it left off after waking.
Photos transfer directly from my Mac to the Kindle and stay stored there, so the slideshow works without Wi-Fi.
What I learned
Next time, I'd set up the feedback loop from the start so the agent could read logs, inspect screen captures, and test fixes on the device.
The Kindle now sits on our wooden shelf, where we use it every day as a photo frame.
I started because I was curious about what AI could help me do with an unused device. Now I have an app for my photos that works the way I asked, plus the tools to keep experimenting with the Kindle.
Disclaimer: This was a personal experiment on my own Kindle, not a step-by-step jailbreak guide. Only experiment with devices you own or have explicit permission to modify.