Remarks

Holiday Hacks 🎄✨

JR Tipton·

A funny time capsule of that time when Opus 4.5 came out, back in December-ish 2025. Funny, trivial things now, but fun for me to look back upon.

Four short remarks from those weeks, kept together here.

The first batch

December 29, 2025

I had some time over the Christmas period to play with Claude Code and the new Opus 4.5 model. I'll put aside my judgment and learnings here, and just document (perhaps to myself) my journey.

Art Walk Maps

Amy, my wife, runs Belltown Art Walk. It's quite an undertaking and it's become an important part of the culture of our downtown neighborhood. One of the things she does is keep track of which venues are on the map. Physical printed copies help some cohort of folks out a lot. It's not a huge ordeal, but I observed it being a little painful, and wrote up a thing to help.

In mid-summer of 2025, this required a lot of back and forth with Claude. In December, it was like, maybe five discussions. 👀

Multi-player, web-based dungeon crawler

One of my brothers reminded me a few days ago of one of Bungie's early games, Minotaur. It was a Mac-based game that used AppleTalk (!) to coordinate a live multiplayer session. It's a fun, quirky, and somewhat complex game. We had a ton of fun with it as kids.

It's hard to play it these days. First of all, you can't buy it. Second, if you do acquire it, it's hard to run. And it's harder still because of AppleTalk.

So I decided to see if I could get Claude Code to build it. It works, and it's live. I don't own the IP or anything, so we're just tinkering around with it.

A few interesting things:

  • The game itself was eminently buildable by Claude. It understood the entire project and picked good frameworks.
  • The sprites—the little images that make up the game—were stored in a clever way inside the old application's resources. Claude needed multiple attempts but eventually, in part by looking at the assembly in the old app, figured out how to reconstruct the sprites.
  • The items have quirky behaviors, many of which introduce special states. For example, you can "trap" an item so another person gets injured if they pick it up. Claude made quick work of this, especially after it built a test harness for it.
  • "We" built it as a Vercel app, but eventually separated it into a server and client architecture and deployed the server to Railway.
  • Asking for cleaner architecture, and more comprehensive testing, worked.

Org simulator

I frequently will write in order to think about something. Walks are even better, but it's cold in December.

I was thinking about what it means for code authoring time to go so close to zero. I mean it practically feels like zero. So what does it mean? I had some priors but wanted to simulate it.

I worked with Claude conversationally to develop a simulation. We made a few together. Ultimately the most simple one is the one I felt I could understand. I still struggle with very complex simulations, but believe they can be super useful.

This was comically easy, by the way. The best thing to do here was to feed the model back to models and ask them to critique and explain them. I ended up doing that right in the page, too, with an LLM invocation in there.

CellarDoor: CellarTracker wrapper

For wine nerds like me, CellarTracker is the gold standard way to keep track of your wines, tasting notes, etc. It's a stalwart, been around for years... but like with many hobbies, people develop their own workflows. I built a wrapper for it.

  • Google OAuth integration went smoothly, but the console is still clicky.
  • I fed Claude some network transcripts (from Chrome) of me doing some actions on the site and it built a pretty good model of it. Adding a CellarTracker mock to the test suite helped, too.
  • I actually ended up changing the site in real time while in the cellar doing some inventory work.

Social event site for a community

Someone in my network has a very interesting idea for a site to serve a community. She mentioned this to me while I was eating dinner at her bar, and I asked her to send me her mockups. The site works, again with Google Auth etc. Her immediate take was that she had no idea how this could come together so fast. My answer was that I didn't, really, either.

Agent Lab

December 31, 2025

I have been tinkering with a few "agentic" patterns, just to look inside a bit after reading about a few on the Manus blog.

I built a little agent lab to play around with a few techniques.

Tool Masking vs Tool Removal

You might remove irrelevant tools from their schema to encourage the model to pick a tool you think is best. (They can get overlaoded with context and options.) But dynamic tool removal breaks your KV cache every time the tool set changes. This masking technique is cute: they don't change the tools, but they do use prefill to say something like, "I used tool file_xyz..." which starts the LLM down the narrower path. Doesn't blow the KV.

Prefill

Put words in the LLM's mouth. You can, for example, strongly encourage a JSON-only response by prefilling with {", or you can skip the hedging with Absolutely!, or even extract structured data by starting the response for it. Compare to elaborate prompts.

File as Context

Context windows are big now, but stuffing everything in still isn't free. Try offloading content to files and retrieving on-demand vs. front-loading everything. The retrieval overhead often beats the attention cost.

Sequential vs Subagents

Pretty straightforward for anyone in distsys, the idea is that spawning (potentially parallel) subagents without the global context can sometimes work more effectively with constrained context rather than global context that gets polluted from all of the separate tasks.

The Duet Obsidian plugin

January 2, 2026

I "built" a silly little Obsidian plugin called Duet.

My writing workflow lately has me using AI quite a bit. I still, though, think that writing manually is very useful for thinking. And I'm quite concerned about "just" throwing some AI-generated text at someone unless I am confident I can stand behind it. Ultimately, respect for the reader's time is paramount.

In my workflow:

  • I outline with Claude, letting it help me structure my thoughts and fill in gaps I hadn't considered.
  • Then I ask it to generate some boilerplate text, the kind of foundational prose that gets ideas on the page but might not be in my voice. And it often isn't really what I want to say.
  • I rewrite almost everything, reworking the AI's output until it sounds like me. The structure might stay, but the voice becomes mine.
  • At various points along the way, I jump back to Claude and ask it for flow, clarity, concision, and "single voice" suggestions.

Duet

I'm practically addicted to Claude Code, so I used the annoying copy+paste shuttling as an excuse to build an Obsidian plugin to streamline the workflow. Now I can outline, generate, revise, and polish without leaving my note-taking app.

Duet

It's pretty wild how easy it was to write a plugin. Normally I'd set aside some time to learn the environ, the norms, the frameworks, etc. This... there was practically none of that. Wild.

You can find it at the GitHub repo.

crew, an agent orchestrator

January 3, 2026

Good engineers have always invested in their own tools. That seems like it's going to go even wilder in the new Opus 4.5 era (and beyond). Custom tooling that would have taken months to build and maintain is now a weekend project.

Agent orchestration, especially distributed orchestration, is going to be particularly tricky. We're in the early invention phase where everyone's figuring out their own approach to coordination, state management, merge conflicts, and so on.

I built crew, a project I can't recommend anyone else use. Still, the idea is simple enough. It uses a local ticket "database" (just files in a repo) with minimal dependencies. The system pops tickets off a queue and farms them out to separate git worktrees, letting agents execute tickets in parallel. Then we use Claude to merge everything back together.

I pointed it at crew itself to handle a backlog of improvements. It made quick work of tasks that would have taken me hours spread across several days. Almost unsettlingly quick. It removed some of the joy of working on the project because it executed so fast I barely had time to think about the problems.

The tooling is rough and the approach is naive, but it worked. That's part of the point: things are ephemeral now and we can embrace that. We can build tools that do what we need, now, and not worry about preserving them if we can just regenerate them rapidly.