Skip to content
Nathan Zhou

Odysseus

An iPhone-style dynamic island for Windows 11.

A thin status line under the top edge of the screen that opens, like the iPhone's dynamic island, to show what is going on: Claude Code sessions at work, music with synced lyrics, playlists an AI picks for your mood, a focus timer, today's homework from Aethalides, Teams digests from Sisyphus, clipboard history, and a quick chat that can search the web. Each activity has its own colour on the line. Click a colour to open its card, or rest the pointer on the line for an overview.

Status
Working, and installed on my own Windows desktop. Its setup wizard can be downloaded here. The repository is private.

How to install and use Odysseus →

What is going on, in a line at the top of the screen. Click to open any of it.

Overview§

On a Windows desktop, the things worth watching are scattered: a Claude Code session finishing its task, the song that is playing, a homework block coming up, a busy Teams chat. Each one is in its own window, so keeping track means switching between them. I made Odysseus for my own Windows 11 desktop, where several of these run at once.

At rest it is a thin coloured line under the top edge of the screen, one segment per activity. Rest the pointer on it and Home opens, with one row each for the working session, a focus timer, what is next today and the latest digest. Click a row or a colour to open that card. Bubbles on either side lead to the other pages: Claude's plan limits and spend, Today's homework and tasks, music, Mood playlists, the clipboard, and a quick chat. Drag the island into a corner and it becomes a spinning ring, whose centre shows whatever matters most by rules you set.

It is a native Rust app with no web view. It is always black with a white hairline so it stays visible over dark title bars, and it is built to use almost nothing while nothing is happening. It is new. The setup wizard installs it for one Windows account, with no admin rights needed. The Claude Code, Aethalides and Sisyphus pages need those tools running, the quick chat and Mood need an AI key, and Mood plays through QQ Music. Without them the island shows less.

At a glance§

Role
Built alone, with AI coding assistants
When
14 Oct 2026 to 8 Nov 2026 · 4 weeks
work on 10 different days
Commits
19
saved steps of work
Automated tests
197
checks the code runs on itself
Code
35,357 lines of Rust
35,664 in all

Counted from the repository on 11 November 2026: commits on every branch, without merges; tests as written, so one that runs several cases counts once; lines that are not blank, without other people's code, generated files or lockfiles.

Key facts§

How it works§

  1. Nothing polls. Each source wakes the app only when something changes: a change notification on Claude Code's session and transcript folders, media session events, the clipboard's update message, or a local POST from a small Claude Code plugin that only reports. Other Windows islands that got complaints about battery life checked the cursor or media many times a second.

  2. Windows does the animation. The island is a Win32 window hosting a Windows.UI.Composition tree. Windows animates its size, position and corner radius from springs sampled off the exact damped curve, so the app's own threads sleep during a transition. I ruled out web-based shells because of their idle cost.

  3. Several activities share the line. Each gets a segment in its own colour: orange for a working Claude session (amber near the 5-hour limit), cyan for a focus timer, and the album's colour for music, shown as a single line that grows from its centre with each beat.

    The open island's Home: the date and plan use, a working Claude session, a running focus timer, a homework block and a Teams digest
    Home: rest the pointer on the line and each activity gets a row, one click from its own card.
  4. Claude Code's state is read from files it already writes. Busy or idle and to-do progress come from its session registry. Spend and tokens come from its transcripts, read from the last offset. Plan limits and subagents come from the reporting plugin. Claude Code never waits on the island.

    A Claude session card: orders-api adding retry with backoff, to-dos at 1 of 4, an Explore subagent at work, and limit and context use
    A Claude session's card: its current step, to-do progress, the subagent at work and how much of each limit is used.
  5. It works with my other projects. The Today page reads Aethalides's plan for the day. Sisyphus's Teams digests show up as prominently as they matter: a full card for an important one, a one-line banner, or a faint capsule that barely leaves the line. When a coding agent asks Sisyphus to message someone, a red card shows the ask until it is approved or rejected.

    The Today page: homework blocks tagged EN and MA with their minutes, three tasks from today's note with Focus buttons, a finished lab
    Today: homework from Aethalides next to the day's own tasks. Focus starts a timer in the island.
  6. Mood playlists are real songs. You type how you feel, Claude Haiku 5.5 picks the songs, and each one is looked up on QQ Music. Any it can't find is dropped, so nothing invented plays. Each playlist gets its own card, from a vinyl record to a boarding pass, and new playlists learn from your thumbs and hearts.

Screens§

  • The Claude page: 5-hour and weekly limits as rings at 59% and 34%, a pace forecast of 00:34, today's spend in hourly bars, two sessions

    Step 04 · The Claude page: plan limits as rings, when the 5-hour window runs out at this pace, and today's estimated spend.

  • An important Teams digest opened: one person needs three slides tonight, another will print handouts, chatter in one other chat, three earlier digests

    Step 05 · An important Teams digest from Sisyphus: what needs you in that chat, then the quieter digests from earlier today.

Built with§