March was a productive month across several projects. On the RDoc side, I focused on making server mode reliable and started work on RBS type signatures in documentation. I also made CI faster in ruby/ruby, added new features to IRB, and shipped a lot of improvements to cctop.

ruby/rdoc

Server mode

The main focus this month was server mode. The rdoc --server PR with live reload landed in mid-March.

ruby/rdoc#1620 by st0012

After merging, I polished it with several follow-up fixes:

ruby/rdoc#1634 by st0012
ruby/rdoc#1647 by st0012
ruby/rdoc#1649 by st0012

With server mode in good shape, I also added make html-server to ruby/ruby so CRuby contributors can preview documentation with live reload.

This is a huge contributing experience improvement as make html currently takes 30~60s to run, depending on your machine, and you have to run it again after every change.

Here’s a demo:

Bug fixes

Auto-linking created broken links when referencing non-text source files like array.c.

The C parser crashed with encoding errors when reading external source files with non-ASCII characters.

Code cleanup

I removed dead code (unused constants, AnonClass, memoized caches in Context), fixed herb linter errors in ERB templates, and moved the RubygemsHook documentation to the right place.

ruby/rdoc#1642 by st0012
ruby/rdoc#1644 by st0012
ruby/rdoc#1645 by st0012
ruby/rdoc#1629 by st0012

What’s next

A few things I’m working on heading into April:

Ruby docs rendered with rbs signatures
Ruby docs rendered with rbs signatures

ruby/ruby

CI optimizations

I spent some time making CRuby’s CI faster this month. The biggest win was parallelizing bundled gems test execution, making that step 35–42% faster.

ruby/ruby#16513 by st0012

I also rebalanced compilation jobs and switched to cheaper result runners, saving about 5 minutes per CI run.

A couple of smaller cleanups: removed a dead “Resolve job ID” step from the CI workflow, and extracted a check_event_support helper in vm_trace.c to reduce duplication.

ruby/irb

Tab completion now shows what commands do in the documentation dialog.

I also added a new startup banner that shows the Ruby logo, version info, and tips.

On the experimental side, I have an open PR for agent mode in binding.irb. With binding.irb(agent: true), IRB exposes itself over a Unix socket so AI agents can interact with a running Ruby process — inspecting state, running expressions, and debugging. This is still exploratory and I’m figuring out the right interface.

ruby/irb#1188 by st0012

st0012/cctop

Around 30 changes shipped this month, mostly polish and reliability:

  • Visual redesign — new theme system (Claude, Tokyo Night, Gruvbox, Nord), notch status pill replacing compact mode, and a draggable panel with per-screen position persistence.
  • Multi-agent support — cctop now supports Claude Code, opencode, and pi. Active subagents are tracked on session cards.
  • Multi-monitor fixes — fixed panel resets, cross-screen navigation shortcuts, and notch pill flickering on external displays.
  • Editor integration — VS Code forks (Cursor, Windsurf) are now correctly identified, and jump-to-session works for minimized iTerm2 windows.
  • Input fixes — keyboard navigation digits now work with non-English input methods, and notifications properly prompt for permission on menubar-only apps.

I’m happy to welcome Janko Marohnić as a new GitHub sponsor this month — thank you!

I also got accepted into Anthropic’s Claude for Open Source program. In last month’s update I mentioned I had applied but hadn’t heard back yet — now I have, and it’s a huge help for sustaining this work.

Current costs: