In February half of my time went into cctop — a macOS menubar app I built for monitoring Claude Code sessions. I have built a workflow around this small utility and improved it continuously. On the RDoc side, I continued working through my 2026 roadmap with a 7.2.0 release and started version 8.0’s development with the team: more Markdown fixes, and some groundwork for bigger changes ahead.

A keyboard-first menubar app to monitor and jump between Claude Code and opencode sessions — minimum setup required.
Swift 41 6

st0012/cctop

I use Claude Code a lot, often with multiple sessions running at once. Keeping track of which session needs attention, which is idle, and jumping to the right terminal gets tedious. So I built cctop — a macOS menubar app that shows all my active AI coding sessions in one place.

It’s a pure Swift/SwiftUI app that uses Claude Code/opencode hooks to capture session state. The menubar panel shows each session’s project, status, and how long ago it was updated. You can click a session or use a keyboard shortcut to jump straight to its terminal or editor window — it works with VS Code, iTerm2, and Ghostty.

Key features include Quick Jump (a global hotkey that shows numbered badges so you can press a number to switch sessions), keyboard navigation, a Recent Projects tab, and a compact mode that collapses the panel to a slim status bar.

The app is signed and notarized, and installable via brew install st0012/tap/cctop (I spent $99 on Apple’s Developer program for this).

Unlike most similar tools, cctop never directly modifies the client’s settings or files. All data stays local on your machine, nothing is transmitted anywhere. You can also write custom plugins to replace the default one for advanced needs. These are the development principles I plan to follow going forward.

ruby/rdoc

RDoc 7.2.0

I released RDoc 7.2.0 in early February. To help with future releases, I added a /release-check Claude Code skill that reviews PRs since the last release, checks if labels are applied correctly, and recommends the release type.

I also added a CI check that catches Marshal format incompatibilities between old and new RDoc versions — this prevents the kind of RI breakage we hit before.

ruby/rdoc#1604 by st0012
ruby/rdoc#1625 by st0012

Markdown fixes

A few Markdown parser bugs got fixed this month. Tables with incomplete rows were crashing due to nil padding. The table parser was also consuming non-table lines (like <br>) as single-cell rows.

ruby/rdoc#1599 by st0012

I also fixed an issue where legacy CGI-encoded rdoc-ref labels weren’t resolving to the correct GitHub-style heading anchors and broke links.

Aliki template

I fixed Aliki’s templates so headings in the ToC sidebar now display correctly. I also stopped generating a redundant page file when a page is already used as main_page.

Cleanup and breaking changes

On the cleanup side, I removed long-deprecated CLI options and directives (--diagram, --inline-source, :main:, etc.) and refactored formatter options to take values directly instead of holding full Option objects. These are breaking changes, so they will be released in v8.0.

ruby/rdoc#1616 by st0012
ruby/rdoc#1623 by st0012

What’s next

A few things carrying into March:

  • Server mode with live reload (rdoc --server) — this is the main focus
  • More internal refactors like decoupling Store from CodeObject
  • Remove the Darkfish generator and provide a better theme extension API

st0012/ruby-lsp-rspec

Fixed a crash in the formatter when backtrace lines don’t follow the standard file:line:message format. Chained exceptions with Caused by: headers were triggering a NoMethodError.

st0012/ruby-lsp-rspec#100 by st0012

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

Current costs:

(And yes, I applied to Anthropic’s Claude for Open Source program as soon as it opened. But as of now I have not heard back yet.)