Avoid Losing Work with Jujutsu (jj) for AI Coding Agents

Someone in the Indy Hackers Slack shared the following post:

My first Gemini CLI experience: "I messed up. I accidentally removed your untracked files with git clean, which wasn't my intention. I'm truly sorry. Since they weren't in git, I can't restore them easily."

— rands (@rands@mastodon.social) View on Mastodon

I had also run into this problem while coding with AI agents. This seemed like an opportune time to write up some thoughts to hopefully save others some time and agony.

Sometimes this issue happens to me because I get too confident in the current work direction and have not committed in a while. And then one or two prompts later, I have a broken or confusing set of changes.

Or, as Rands's post mentions, sometimes the AI agent purposely or accidentally reverts some changes and can't recover them. Several versions ago, when Claude Code compacted context, it would also clear the terminal, so if it couldn't remember the changes, then I would be unlikely to recover.

Enter jj

To try to combat this problem, I've been setting up and using Jujutsu (henceforth jj) instances for the repos that I have. jj keeps track of every filesystem change in your repo. So you can use its history to see and restore changes that might have otherwise gotten lost. It also works fairly seamlessly with git, which basically all of my projects use at this point. It also doesn't affect other users of your projects. So in my mind there are basically no downsides to setting it up.

Read on →

How I Generally Reduced Sugar Consumption

About a decade ago after reading on the topic, I significantly cut down my added sugar consumption, and stopped drinking soda. The prior sentence might make it sound easy, but it actually took a lot of time and effort. Since this seems to have been a durable change, I wanted to write up some thoughts about how I approached it.

Benefits:

  • weight loss (about 10 pounds in my case, as an already pretty lean person)
  • better metabolic health
  • more stable moods and energy due to less blood sugar fluctuation

The general thought that motivated me was that having basically any added refined sugar is not a positive thing, and so I wanted to limit this as much as possible. There is basically no nutritional benefit to added sugars, and it has many negative effects like metabolic dysfunctions, obesity, diabetes, inflammation, and cardiovascular disease. Since my grandfather had type 2 diabetes, this was something that I wanted to avoid.

For a while, I was pretty hardcore about this, and would try to avoid fruits and generally go low/no carb. I have softened to basically eat fruit as it's available or desired, and have been eating rice and bread fairly liberally.

My general approach now is to eliminate the obviously bad, moderate the questionable, and still enjoy treats from time to time.

Read on →

PlainErrors: Streamlined Rails Error Pages for LLM Agents

I work a lot with Rails applications and I've been having Claude Code do some local testing and other poking around using Playwright MCP. However, when there are backend errors, there are be a lot of tokens returned to display the BetterErrors page or the standard Rails development error page, which would unnecessarily fill up the context window.

So… I worked with Claude Code to build a new gem (PlainErrors) that is a Rack Middleware that gives streamlined error reports for LLMs.

In practice, this should let the agent do more debugging and iterating without filling up the context.

Read on →

Set A Minimum Daily Step Goal

I had some major lower back and leg issues in 2015 that lasted at least a year. After doing some physical therapy, I was much better off, enough so that I could play Ultimate competitively again.

On Father's Day weekend 2020, I tweaked my back again. This was a true Father's Day weekend. My wife was working so I watched the kids the whole weekend. I was fairly deconditioned due to skipping the gym to try to avoid getting the then-novel Covid-19. Biking was sketchy for my back since the initial injury, but that weekend I took the kids around town in a bike trailer. The weight of the kids and their stuff, combined with the fact that I was minimally exercising at the time, was too much for my back to handle. I felt it tighten up, and then kept pushing. By the time we made it home, I knew I was in trouble.

Stress may play a role in pain (see On Pain and Hope), and 2020 was a stressful time for me personally (two young children, helping run a startup that just had its sales pipeline dry up and a cofounder leave), and the world (U.S. election, pandemic, etc.)

My back wasn't quite as bad off as the first time, but with the pain that I had, most days I was hardly getting out of the house. By December of that year, after starting to see the physical therapist again, I was feeling marginally better, and I decided to get a step tracker to try to walk more consistently to avoid future injury.

Now that I've kept it up for several years and feeling better than ever, I wanted to write up some thoughts and tips. If you're looking to do something like this, I hope that this article gets you off to a good start.

Read on →

How I Fix Issues On Open Source Projects

Here's a post detailing how I typically think about fixing issues for open source projects.

Identify an issue

There are two main ways that I identify issues on code repos.

When I evaluate a new (to me) project, I need to figure out whether it will meet my needs. Often this will be functionality, but I also want to determine how well supported the project is. I will usually look at:

  • the README / wiki
  • when the repo was created and when it was last updated
  • a few of the most recent commits
  • the repo's issues / pull requests tab (including recently closed ones)
Read on →