◉ Pulse
devkriter avatar
#43 today

devkriter/capsOS-Agent-Tracker

Swift AI

A small vibe-coded app to track agent status in claude.

Created Jul 1, 2026
Stars
35
Today
+35
Forks
0
Quality
65/100
Momentum
17

README

Fetched from GitHub on Oct 30, 2026, 11:00 PM UTC · README.md

View original on GitHub

Third-party content — Open Source Pulse is not the owner of this repository.

This README belongs to devkriter/capsOS-Agent-Tracker and its contributors. We fetch it directly from the project’s public GitHub repository and display it for reference only. All text, code, images and trademarks remain the property of their respective authors. See the repository for its license terms. Copyright / takedown policy.

CapsLockLED 💡

Turn your MacBook's Caps Lock light into a status light for Claude Code.

While Claude works, the Caps Lock key's light blinks. When Claude needs you or finishes, it signals differently — so you can look away from the screen and still know what's happening at a glance.

The Caps Lock light does this… …when
🔵 Slow blink Claude is working on your request
🟠 Fast blink Claude is waiting for you (a permission prompt, a question, or it's idle)
🟢 Two quick flashes, then off Claude finished responding

Your actual Caps Lock stays off the whole time — only the light is used. The app never reads what you type.


Install (the easy way) — about 2 minutes

  1. Open CapsLockLED.dmg (double-click it).

  2. In the window that opens, drag the CapsLockLED icon onto the Applications folder next to it.

    ![drag to Applications] ← that's the whole install.

  3. Open your Applications folder, then right-click CapsLockLED and choose "Open".

    • Do this the first time only. Because this app isn't from the Mac App Store, a plain double-click may show a warning — right-click → Open gets past it. Click Open on the dialog that appears.
  4. Look at the top-right of your screen (the menu bar). You'll see a small circle icon — that's CapsLockLED running.

    • Don't see it? If you use a menu-bar organizer like Barbee, Bartender, or Ice, it may be hiding the icon. Click its expand arrow and drag CapsLockLED into the visible area.
  5. Grant permission. The first time it runs, click the icon → "Open Input Monitoring Settings…", turn CapsLockLED on in the list, then quit and reopen the app.

    • This "Input Monitoring" permission is simply what macOS requires to touch the keyboard light. The app doesn't log or send anything.
  6. Connect it to Claude Code. Click the menu bar icon → "Set Up Claude Code Hooks". That's it — you'll get a confirmation.

  7. Start a new Claude Code session and watch the Caps Lock light react. 🎉

Recommended: click the icon → "Launch at Login" so it's always ready.


Using it day to day

  • Just keep the app running (Launch at Login handles this). Every Claude Code session on this Mac will drive the light automatically.
  • The menu bar icon changes color too (blue / orange / green), so it mirrors the light.
  • Test it anytime: menu bar icon → Test Blink → Working / Needs Input / Done.

Troubleshooting

The menu bar icon isn't there. A menu-bar manager (Barbee, Bartender, Ice, Hidden Bar…) is probably hiding it. Reveal hidden icons and drag CapsLockLED into the always-shown area. The app is still running — this is just about showing its icon.

The light doesn't respond.

  • Make sure the app is running (icon in the menu bar).
  • Check System Settings → Privacy & Security → Input Monitoring and confirm CapsLockLED is turned on. If it's on but still not working, toggle it off and on, then quit and reopen the app.
  • Use Test Blink in the menu to check the light directly. If Test Blink works but Claude Code doesn't trigger it, re-run "Set Up Claude Code Hooks" and start a new Claude Code session (hooks load when a session starts).

macOS says the app "can't be opened" or is "damaged". Right-click the app → Open (instead of double-clicking). If it still refuses, run this once in Terminal: xattr -dr com.apple.quarantine /Applications/CapsLockLED.app

I want to disconnect it from Claude Code. Menu bar icon → "Remove Claude Code Hooks".


Sharing this with someone else

This app is self-signed, not notarized by Apple. On your Mac it opens normally. If you send the .dmg to a friend, their Mac's Gatekeeper will be more suspicious — they'd need the right-click → Open / xattr step above, and even then macOS may warn about an unidentified developer. To distribute it widely and cleanly you'd need an Apple Developer account to sign & notarize it.


For developers

Built as a Swift Package (no Xcode project needed — just Command Line Tools).

./build.sh      # compiles and assembles CapsLockLED.app (code-signed locally)
./make-dmg.sh   # packages CapsLockLED.app into dist/CapsLockLED.dmg

How it fits together

  • CapsLockLED.app — a menu bar app (LSUIElement). Talks to the keyboard's HID LED element via IOKit (IOHIDDeviceSetValue) to toggle the Caps Lock light without changing the Caps Lock state.
  • caps-signal — a tiny CLI inside the bundle (Contents/MacOS/caps-signal). Claude Code hooks call it; it posts a DistributedNotificationCenter message that the running app reacts to. It needs no permissions of its own.
  • The Notification hook is scoped with a matcher so Claude Code only runs it for the prompts where work stalls until you act (permission_prompt, elicitation_dialog, agent_needs_input) — it fires caps-signal needs-input directly, so there's no stdin JSON parsing. idle_prompt is intentionally excluded: it fires the moment the agent finishes and goes idle, so including it would turn every "done" into a false "needs you" alarm. The fast "needs input" blink also self-clears after a timeout (BlinkEngine.needsInputTimeout) so a stray notification can't leave the light stuck on.
  • HookInstaller.swift — the "Set Up Claude Code Hooks" logic. Also runnable headless: CapsLockLED --setup-hooks / --remove-hooks. It merges three hooks into ~/.claude/settings.json, pointing at the app's own bundle, and preserves any other settings/hooks you already have.

Hooks installed

  • UserPromptSubmit → caps-signal working
  • Stop → caps-signal done
  • Notification (matcher permission_prompt|elicitation_dialog|agent_needs_input) → caps-signal needs-input (fast blink self-clears after a timeout)

Code signing note. build.sh signs with a local self-signed identity ("CapsLockLED Dev") if present, otherwise falls back to ad-hoc. A stable identity matters because macOS ties the Input Monitoring grant to the app's signature — with ad-hoc signing, every rebuild changes the signature and resets the permission. To create the identity once:

# generate a self-signed code-signing cert named "CapsLockLED Dev",
# import it into your login keychain, and trust it for code signing
# (see the commit history / your notes for the exact security+openssl commands)

Permission gotcha. macOS attributes Input Monitoring to the responsible process that launched the app. If you launch it from a terminal or another tool, macOS may check that app's permission instead. Launch CapsLockLED from Finder so it's judged on its own.

Rendered by GitHub from the repository’s README. Scroll to read the full file.
First trending

Jul 18, 2026

first spotted on the list

Best rank

#43

highest position reached

Appearances

3

times on the trending list

Quality score

65

out of 100

Momentum

17

trend strength indicator

Star velocity

0.29

stars per day since creation

Activity — last 60 days

daily counts, collected every 6 hours
  • Stars
  • Forks
  • Merged PRs
  • Issues
  • Closed issues

Collecting activity data since launch — check back in a few days.

Star history

total stars per snapshot
33343536devkriter/capsOS-Agent-Tracker · Jul 18, 7 AM UTC: 34 starsdevkriter/capsOS-Agent-Tracker · Jul 18, 8 AM UTC: 35 starsdevkriter/capsOS-Agent-Tracker · Jul 18, 9 AM UTC: 35 stars7:22 AM8:16 AM9:09 AM

Rank history

position on trending · lower is better
#1#40#45#50#55#60#65#70Jul 18, 7 AM UTC: rank #69Jul 18, 8 AM UTC: rank #43Jul 18, 9 AM UTC: rank #437:22 AM8:16 AM9:09 AM

3D card for your website

Live HTML card with a glass surface and pointer tilt. Paste the iframe on any website.

<iframe src="https://www.notionpulse.cc/embed/devkriter/capsOS-Agent-Tracker" width="420" height="240" style="border:0;max-width:100%;background:transparent" loading="lazy" title="devkriter/capsOS-Agent-Tracker — trending on Open Source Pulse"></iframe>

Stars badge

Show current stars in your README or profile. Auto-updates every 6 hours.

devkriter/capsOS-Agent-Tracker stars badge
Markdown
[![devkriter/capsOS-Agent-Tracker](https://www.notionpulse.cc/api/badge/devkriter/capsOS-Agent-Tracker.svg)](https://www.notionpulse.cc/repo/devkriter/capsOS-Agent-Tracker)
HTML
<a href="https://www.notionpulse.cc/repo/devkriter/capsOS-Agent-Tracker"><img src="https://www.notionpulse.cc/api/badge/devkriter/capsOS-Agent-Tracker.svg" alt="devkriter/capsOS-Agent-Tracker stars badge" /></a>

Repository of the Day

#43 Repository of the Day

Repository of the Week

#43 Repository of the Week

Repository of the Month

#43 Repository of the Month