Skip to content
Back to skills

Agent Signals

ASecurity

Use the Agent Signals desktop app to watch the Claude Code sessions on this machine and signal the user (sound, spoken text, notification, taskbar or Dock flash, focus a terminal tab). Trigger on "agent signals", "signals app", "play a sound when <agent> finishes", "say it out loud when", "notify me when", "tell me when <session> is done / needs input", "which agents are busy", "show a status for", "track the agents".

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 26, 2026
ai-agentsgoshellapi

Works with

  • claude code
  • terminal
  • api

Security analysis

A96/100
  • mediumUses curl or wget to download content

Pro shows the line behind each finding and how to fix it

Scanned October 26, 2026

npx -y skills add taublast/AgentSignals --skill agent-signals --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Agent Signals?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Agent Signals
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/taublast-agent-signals/badge)](https://www.skillsdirectory.com/skills/taublast-agent-signals)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: agent-signals
description: Use the Agent Signals desktop app to watch the Claude Code sessions on this machine and signal the user (sound, spoken text, notification, taskbar or Dock flash, focus a terminal tab). Trigger on "agent signals", "signals app", "play a sound when <agent> finishes", "say it out loud when", "notify me when", "tell me when <session> is done / needs input", "which agents are busy", "show a status for", "track the agents".
---

# Agent Signals

Windows and macOS app in `<app-folder>` with a local HTTP API on `http://127.0.0.1:47801`. It lists every
live Claude Code session on this machine (it reads `~/.claude/sessions` itself) and runs signals.
`GET /` prints the API.

## Start it when it is not running

Windows:

```powershell
try { Invoke-RestMethod http://127.0.0.1:47801/sessions | Out-Null } catch {
    Start-Process "<app-folder>\target\release\agentsignals.exe"
    Start-Sleep 2
}
```

macOS (the downloaded app in Applications, or the build in `<app-folder>`):

```sh
curl -s -o /dev/null http://127.0.0.1:47801/sessions || open -a "Agent Signals" || ("<app-folder>/target/release/agentsignals" &)
```

Not built yet: run `cargo build --release` in `<app-folder>` (see its README).

## Turn the user's request into a rule

The app watches the sessions itself; a rule fires even when no agent is around. Do not poll the
sessions yourself to fire signals: add a rule.

| The user says | Rule |
|---|---|
| "every time api-server finishes, play a sound" | `{session:"api-server", on:"finished", sound:"tada"}` (macOS: `"Glass"`; names from `GET /sounds`) |
| "say it out loud when build-bot finishes" | `{session:"build-bot", on:"finished", say:"{name} finished"}` |
| "tell me when build-bot is done" (one time) | `{session:"build-bot", on:"finished", say:"{name} finished", toast:"{name} finished", once:true}` |
| "warn me when any agent needs me" | `{session:"*", on:"waiting", say:"{name} needs you", flash:true}` |
| "ignore quick answers" | add `min_busy_s: 30` to a `finished` rule |

- `on`: `finished` (busy to idle), `waiting` (asks for input or has a dialog open), `started`, `closed`.
- `session`: the exact name from `GET /sessions` (case does not matter), or `*`. Check the name
  there first.
- Actions, any mix: `sound` (a name from `GET /sounds`, or a full path to a sound file), `say` (spoken),
  `toast` (+ optional `title`), `flash`, `raise`. Text takes `{name}` and `{waiting}`.
- Rules persist across restarts. List with `GET /rules`, remove with `DELETE /rules/<id>`.
  Tell the user which rule you added (its id) and how it will sound.

```powershell
$r = @{ session = "api-server"; on = "finished"; sound = "tada"; say = "{name} finished" } | ConvertTo-Json
Invoke-RestMethod -Method Post http://127.0.0.1:47801/rules -Body $r -ContentType application/json
```

```sh
curl -s http://127.0.0.1:47801/rules -d '{"session":"api-server","on":"finished","sound":"Glass","say":"{name} finished"}'
```

## Other calls

- Signal now: `POST /signal {say:"build done", sound:"chimes", session:"<your name>"}`.
- A status line under a session: `POST /note {session:"<name>", text:"packing 3 of 7"}`; empty
  `text` clears it.
- `POST /focus {session}` selects that session's terminal tab (Windows Terminal, or Terminal.app on macOS). Only when the user asks: it
  changes what they are looking at.
- Tint a session's row: `POST /tint {session:"<name>", color:"#3B82F6"}`; empty `color` clears it,
  `GET /tints` lists them. Only when the user asks.
- `GET /events`: the last 50 status changes and what fired. Read it to check a rule worked.

## Manners

- Speech and sounds interrupt the user. Add only what they asked for; prefer `once` for one-off waits.
- Never delete or change rules the user did not ask about.
- Muted (switch in the app): rules still log in `/events`, nothing plays.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.