An open API service indexing awesome lists of open source software.

https://github.com/kl0sin/clyde

A friendly Claude Code session monitor for macOS. Real-time session tracking, attention alerts, multi-session view.
https://github.com/kl0sin/clyde

claude claude-code developer-tools macos menu-bar menubar-app native sparkle swiftui switft

Last synced: about 2 months ago
JSON representation

A friendly Claude Code session monitor for macOS. Real-time session tracking, attention alerts, multi-session view.

Awesome Lists containing this project

README

          

Clyde

# Clyde

**A friendly Claude Code session monitor for macOS.**

Know what Claude is doing β€” without alt-tabbing.

[Website](https://kl0sin.github.io/clyde/) Β·
[Download](https://github.com/kl0sin/clyde/releases/latest) Β·
[Changelog](CHANGELOG.md)

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
![macOS 13+](https://img.shields.io/badge/macOS-13%2B-blue)
![Swift 5.9](https://img.shields.io/badge/Swift-5.9-orange)
![Universal](https://img.shields.io/badge/binary-universal-purple)

---

Clyde is a tiny SwiftUI menu bar app that watches every
[Claude Code](https://claude.com/claude-code) session running on your Mac
and shows you, in one glance, whether they're working, ready, or need
your attention.

It connects to Claude Code's native hook events, so updates are
**instant** β€” no polling, no lag, no missed permission requests.

## Features

- 🟒 **Real-time session tracking** β€” busy / ready / needs-input, fed by
Claude Code's native hooks. No polling.
- πŸ”” **Attention alerts** β€” sound and macOS notification the moment
Claude asks for permission. Never miss a prompt again.
- πŸ—‚ **Multi-session view** β€” every Claude session, every terminal, in
one expandable panel. Drag to reorder, name them, click to focus the
matching window.
- πŸ“œ **Activity timeline** β€” recent prompts, permissions and session
lifecycle, in plain language.
- 🎯 **Menu bar capsule** β€” dominant state at a glance, with two ticks
for the other states.
- πŸ’€ **Snooze** β€” 15 / 30 / 60 / 120 minute mute when you need quiet.
- ⌨️ **Global hotkey** β€” `βŒƒβŒ˜C` to expand from anywhere.
- πŸ›  **Self-installs the hook** β€” Clyde adds and self-heals its hook
script in `~/.claude/hooks/` so you never have to think about it.
- πŸ”’ **Privacy-first** β€” no telemetry, no network calls, no accounts.
Everything stays on your Mac.

## Install

Grab the latest `.dmg` from
[Releases](https://github.com/kl0sin/clyde/releases/latest), open it,
drag `Clyde.app` into your Applications folder, and launch it.

On first run Clyde offers to install its Claude Code hook automatically β€”
accept and you're done.

> **Early releases are not yet code-signed or notarized.** On first
> launch macOS Gatekeeper will say the app is "from an unidentified
> developer". Right-click `Clyde.app` β†’ **Open** β†’ confirm in the
> dialog. macOS remembers the exception, so subsequent launches are
> clean. Signing and notarization are on the roadmap and will land in
> a later release.

### Updates

Clyde ships with [Sparkle](https://sparkle-project.org/) built in for
in-app auto-updates. The update channel is dormant until signed
releases start publishing to the appcast β€” until then, grab new
versions from
[Releases](https://github.com/kl0sin/clyde/releases) directly.

## How it works

Clyde reads two things from your local file system:

- `~/.claude/` β€” to install its hook script and discover Claude Code's
settings.
- `~/.clyde/` β€” where the hook script writes per-session state files
that Clyde watches via FSEvents.

When you submit a prompt, Claude Code fires a `UserPromptSubmit` hook β†’
the hook script writes a `-busy` marker β†’ Clyde sees it
within milliseconds and updates the UI. When Claude finishes, the `Stop`
hook removes the marker. Permission requests fire `PermissionRequest` β†’
Clyde rings a sound and shows the attention pill.

That's the entire architecture. No polling, no daemon, no privileged
helpers.

## Screenshots

**The expanded view β€” every Claude session at a glance.**
Hero header tells you the dominant state, the list shows each session
with its directory, and the activity bar at the bottom keeps a
running tally.

![Clyde expanded view with multiple Claude Code sessions](site/img/screenshots/expanded.png)

**The collapsed widget.** Floats wherever you drop it. The big number
is the dominant state count; the two ticks on the right show the
others. Click to expand, drag to move, hide entirely if you only want
the menu bar.

![Clyde floating widget on the desktop](site/img/screenshots/widget.png)

**The menu bar item.** Pixel‑accurate Clyde silhouette plus a colour
capsule for the dominant state β€” purple = working, green = ready,
blue = needs attention.

![Clyde menu bar item](site/img/screenshots/menubar.png)

## Build from source

Clyde is a single self-contained Swift Package. No Xcode project,
nothing to configure.

```bash
git clone https://github.com/kl0sin/clyde.git
cd clyde
swift run Clyde
```

For a release build wrapped in a proper `.app` bundle:

```bash
scripts/release/build.sh
open build/release/Clyde.app
```

See [`docs/release-process.md`](docs/release-process.md) for the full
release pipeline (signing, notarization, DMG, appcast, GitHub Releases).

## Project layout

```
Clyde/ Main app source
β”œβ”€β”€ App/ NSApplicationDelegate, panel + menu bar
β”œβ”€β”€ Models/ Session, ClydeState, ActivityEvent
β”œβ”€β”€ Services/ ProcessMonitor, AttentionMonitor, hook installer, ...
β”œβ”€β”€ ViewModels/ App + session list view models
β”œβ”€β”€ Views/ SwiftUI views
β”œβ”€β”€ Resources/ clyde-hook.sh (the hook script that ships in the bundle)
└── Assets/ AppIcon.icns (generated by scripts/generate-icon.swift)

ClydeTests/ XCTest test target
scripts/ Build + release tooling
site/ GitHub Pages landing page (deployed via Actions)
Casks/ Homebrew cask formula
.github/workflows/ CI: deploy-site.yml, release.yml
docs/ Pre-launch checklist + release process docs
```

## Tests

```bash
swift test
```

The suite is hermetic β€” `HookInstallerTests` redirects every path
through a throwaway temp home via `AppPaths.homeOverride`, so nothing
under your real `~/.claude/` is ever touched. Runs deterministically
across reruns on dev machines and CI alike.

## Contributing

Bug reports and PRs welcome. For non-trivial changes please open an
issue first so we can discuss the approach.

## Support development

Clyde is free and MIT-licensed. If it's saving you time and you'd
like to chip in, there are two ways:

- ❀️ [Sponsor on GitHub](https://github.com/sponsors/kl0sin) β€” recurring or one-time, processed by GitHub.
- β˜• [Buy me a coffee](https://www.buymeacoffee.com/kl0sin) β€” one-off tip, no account needed.

Both are entirely optional and there's no paid tier β€” Clyde stays
fully featured for everyone.

## License

[MIT](LICENSE) β€” use it, fork it, sell it, do whatever.

---

Built in SwiftUI with care by Mateusz KΕ‚osiΕ„ski.