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:
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:
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!:

Other RDoc improvements
Outside the RBS work, here are the RDoc PRs I opened during these two months:
- Clean up: I dropped the parser based on Ripper, so RDoc 8.0 will have a single parser to improve and maintain: Prism. I also removed dead rdoc/markdown handling from the rubygems plugin and the obsolete
-Vshort flag. - Fixes: page links returning 404 in server mode, broken sidebar links for chained class aliases, unresolved cross-references losing their
#prefix, and the lazy alias resolver no longer overwriting real classes. - Docs: a new configuration reference.
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.

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:
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:
Sponsor my work
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:
- Apple Developer Program: $99/year
- Claude Code Max: covered by Anthropic’s Claude for Open Source program until September 2026
- ChatGPT Pro: covered by the OpenAI OSS sponsorship until November 2026