oh hey, it's owais

Robots! Pictures! Documents!

Dev Log 45: 2026-01-27

January 27, 2026

Thunderus

Gas Town has been the uh talk of the town it seems and Maggie Appleton's notes on it were really interesting and informative. What stood out to me was how she pointed out that agents focus on the chat and not the code itself. Transparency and learning are central to the vision of this project and I've been thinking more about how I can make that front and center when I finish up some of extensibility work I'm doing right now.


Anyways, here's what I've done on this agent this past week. I've added a lot of infrastructure around observability and tooling, for myself (or any other contributors) mostly. The short list is provider mocking, retry mechanisms, replay capabilities, health checks, network access control and categorized debug logs. More infrastructure was also added around Integrated direct shell command execution within the UI. I'm still thinking through security and permissions around this.

GitHub - stormlightlabs/thunderus: a programming sidekick
a programming sidekick. Contribute to stormlightlabs/thunderus development by creating an account on GitHub.
https://github.com/stormlightlabs/thunderus

I built a memory system with SQLite FTS5 (because compiling lancedb was agonizingly slow). This is for searching materialized markdown views (their just Memory, Plan, and Decision documents), and delineating between procedural and semantic memory. To manage memories, there's a memory inspector UI and a gardener construct to validate and enforce its structure. The gardener detects orphan documents, resolves fact deduping, and has a consolidation pipeline. I still have a lot of testing to do but I really hope this does a better job with session context than Claude does. Memory is a huge part of the work to make Thunderus stand out, inspired really heavily by what I've learned reading Letta docs.

On the UI/observability side, I added a "Memory Hits" panel and with hunk labeling to categorize changes by intent when looking at diffs of changes. Like other agents, there's approval controls too.

I'm still working on the prompts around skills, but there's a system added. It's not great at the moment.

Lazurite

The past week I've done a lot of enhancing and refactoring. I wrote extensive project documentation after refactoring more domain models to use freezed. The nesting is a little absurd in flutter code so I started refactoring widget construction into helper methods.

owais's avatar
owais
2d

I love you dart & flutter but also

Deeply nested dart code

The big feature I've been working on is adding post scheduling with local notifications. One of the cooler aspects of this project is being forced to use a well designed language without much help from any coding assistants.

desertthunder.dev/lazurite
mobile bluesky app made with flutter
https://tangled.org/desertthunder.dev/lazurite

Thunderbot

I built this stateful AI both using the same pattern I always do: a cli & core crate. The bot consumes Jetstream events for tags and then stores memories and events in a SQLite database. Originally this was going to live on fly.io but now I'm thinking my NUC.

Every AT Proto adjacent project I've done, I reimplement XRPC clients and did that again here. It's kinda tedious and I should probably use one of the many awesome libraries in the Rust ecosystem for this.

On the LLM side of things I made a prompt builder for the autonomous agent using Gemini 3 (free tier!) and GLM-4.7 (I never hit limits in my lite plan).

GitHub - desertthunder/thunderbot
Contribute to desertthunder/thunderbot development by creating an account on GitHub.
https://github.com/desertthunder/thunderbot

Also, I love writing HTML with maud. I've used it to make a HTMX dashboard with chat, and monitoring. It's pretty awesome.

This is also the first project recently where I've opted to keep a contributing doc and symlink it to the agents file thanks to this post. This will probably expose a ton of failure modes but it remains to be seen!

Garuda

The name of this started as a bit of a joke about Garuda linux. This app has nothing to do with anything related to it.

It's a text extraction tool for PDFs & images that uses PDF.js & Tesseract. I built an orchestrator to manage the tasks created by workers between Tesseract and PDF.js (to handle pdfs with a lot of different sources of text). I'm actually pretty proud of how this works.

GitHub - stormlightlabs/garuda
Contribute to stormlightlabs/garuda development by creating an account on GitHub.
https://github.com/stormlightlabs/garuda

On my personal website I built an adapter for minisearch in Astro and did a similar thing here, to search for text in a local library.

Svelte testing is pretty neat! I wish testing the $derived rune worked properly. Shout-out to sveltest.dev for a good resource for testing patterns.

Looking Ahead

I'm gonna try to get my personal site to be in sync with this blog with help from the astro standard site template. Other than that my goal, like my overarching goal of this year, is to release stuff!

Subscribe to oh hey, it's owais
to get updates in Reader, RSS, or via Bluesky Feed
Not So Secret Agent

devlog
agentic ai
rust
svelte
local-first
atproto