dsaveliev

Opencode Tab Spinner — Design skill for Claude Code

Design community

opencode plugin: spinner in the terminal tab title while the agent works — Claude Code style.

How to install Opencode Tab Spinner

This entry records only its repository, not the path inside it, so there is no exact command to give. Open dsaveliev/opencode-tab-spinner and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Opencode Tab Spinner does

opencode plugin: spinner in the terminal tab title while the agent works — Claude Code style. Zero dependencies, single file.

Alternatives in Design

  • Od Contribute — Open a first-contribution PR (or bug issue) on nexu-io/open-design — works for non-coders too 91.8k ★
  • Brainwave — Learn to create modern websites with sleek parallax effects and bento box layouts 1.9k ★
  • Clui Cc — A lightweight, transparent desktop overlay for Claude Code on macOS 956 ★

README

opencode-tab-spinner

[![CI](https://github.com/dsaveliev/opencode-tab-spinner/actions/workflows/ci.yml/badge.svg)](https://github.com/dsaveliev/opencode-tab-spinner/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Node](https://img.shields.io/badge/node-%3E%3D18-green.svg)](https://nodejs.org) [![Dependencies](https://img.shields.io/badge/dependencies-0-success.svg)](#) [![opencode plugin](https://img.shields.io/badge/opencode-plugin-8A2BE2.svg)](https://opencode.ai/docs/plugins)

An [opencode](https://opencode.ai) plugin that animates your terminal tab title while the agent is working — the behavior Claude Code users know: a spinner while the model runs, a check mark when it waits for you.

tab title while working:   ⠋ myproject  ⠙ myproject  ⠹ myproject …
tab title when idle:       ✓ myproject

Works with any OSC-capable terminal: **Ghostty**, Kitty, WezTerm, iTerm2, xterm and friends. No configuration required.

How it works

opencode plugins receive in-process session events. The plugin listens for them and writes an OSC 0 title sequence to the TUI process's own `/dev/tty` — so every tab is isolated for free, and the signal is exact:

  • session.status busy/idle brackets every LLM call and gives an instant idle at turn end
  • message.part.delta (the per-token stream) keeps the animation alive through reasoning and tool execution
  • a trailing metadata update of your last message (arriving ~60 ms after the turn ends) is recognized and ignored — the spinner never resurrects after a finished turn

The signal contract was verified empirically against opencode 1.18.x and is protected by 23 regression tests, several of them rehearsals of real production incidents.

Install

Option A — global file install (recommended, verified)

git clone https://github.com/dsaveliev/opencode-tab-spinner ~/.config/opencode/opencode-tab-spinner
ln -s ~/.config/opencode/opencode-tab-spinner/s