This update covers April and May together. In April most of my time went into prototyping and preparing for my RubyKaigi talk, The future of Ruby documentation, so I made less progress on my projects that month.

On the documentation side, RBS support is coming to RDoc, and docs.ruby-lang.org/en/master now shows RBS signatures. I also released IRB v1.18.0 and moved cctop close to fully supporting Claude Desktop and Codex Desktop sessions.

RBS signatures in Ruby documentation

My RubyKaigi talk was about where I think RDoc should go next: parsing Ruby with Prism, better Markdown support, showing RBS signatures in HTML and ri, the live preview server, and keeping Ruby documentation useful in the AI era. The work after the talk continued in the same direction, and the biggest piece was RBS signatures.

RDoc improvements

The core change was making RDoc understand and display RBS signatures, so type information becomes part of Ruby’s documentation instead of a separate artifact:

ruby/rdoc#1665 by st0012

Signatures now appear in both the generated HTML and ri. I also styled method entries as signature cards in the Aliki theme, so they look like part of the method documentation, not extra text:

Ruby build improvements

RDoc can only render signatures when rbs is built and available, so the next step was making that work in ruby/ruby’s own build pipeline. It took a few attempts: my first one landed but had to be reverted.

Nobu helped a lot here. He removed an unnecessary rbs require from the RDoc wrapper script, and also fixed running RDoc with baseruby when cross-compiling:

ruby/ruby#16935 by nobu

On my side, I made the build extract bundled gem C extensions before configuring them, so rbs is built properly and available when RDoc runs:

The result

docs.ruby-lang.org/en/master now shows RBS signatures. Here’s what it looks like on String#gsub!:

String#gsub! with RBS signatures on the master docs
String#gsub! with RBS signatures on the master docs

Other RDoc improvements

Outside the RBS work, here are the RDoc PRs I opened during these two months:

The configuration reference covers RDoc’s four configuration mechanisms in one page: .rdoc_options, RDoc::Task, .document, and the RDOCOPT environment variable. It also flags the naming differences between them, which are easy to get wrong.

st0012/cctop

cctop now has an official website: cctop.app. It covers the supported tools, features, themes, and installation in one place.

The cctop.app homepage
The cctop.app homepage

On the app side, v0.16.0 shipped a better first run experience. The app now surfaces Claude Code installation from inside the UI, detects orphaned plugin caches more reliably, supports the new Codex hooks config key, and has an empty state that covers all four supported agents.

After that release, I kept working on a bigger goal: full support for Claude Desktop and Codex Desktop sessions, not just terminal sessions from Claude Code or Codex CLI.

Desktop apps don’t behave like shells, so this opened up many lifecycle details: recovering titles in the middle of a turn, showing each Codex Desktop conversation separately, hiding maintenance/subagent/helper sessions, keeping dormant sessions across restarts, and routing notification clicks to the right window.

OpenCode sessions got a fix too: cctop now detects OpenCode’s question prompts as permission waits, so a session waiting for your answer no longer looks active.

ruby/irb

IRB v1.18.0 was released right at RubyKaigi. The changes users will notice are command descriptions in the completion dialog, the new startup banner (which can be disabled with --nobanner), and method name highlighting. It also completed IRB’s migration to Prism, which users won’t notice but leaves IRB with a single parser to maintain going forward:

ruby/irb#1200 by st0012
ruby/irb#1206 by st0012
ruby/irb#1208 by st0012

At the end of May, I fixed a history saving bug on Windows. IRB checked whether the history directory was writable before saving, but that check is unreliable on Windows and caused false warnings. Now IRB just attempts the write and reports the actual error:

If you have been enjoying my work, your sponsorship will be greatly appreciated.

Some good news on this front: I received an OSS sponsorship from OpenAI. Together with Anthropic’s Claude for Open Source program, this makes the AI tooling cost much easier to sustain.

Current costs: