This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

tools.say, skills.notify: add TTS attention tool and skill, wire into wrapper

Adds `s say "..."` which speaks via flite TTS and posts a desktop
notification. The notify skill documents when to use it; the wrapper
registers the skill and allows `s` in Bash so calls don't prompt.

+93
+39
skills/notify/SKILL.md
··· 1 + --- 2 + name: notify 3 + description: Get the user's attention by speaking a short message via TTS and posting a desktop notification. Use when a long-running task finishes, when you need input to continue, or when something needs human attention. 4 + --- 5 + 6 + # Notify Skill 7 + 8 + Use `s say` to alert the user — it speaks via flite TTS and posts a desktop 9 + notification. `s` is the superconfig launcher; it resolves the flake and runs 10 + the tool, so you don't need to know where the checkout lives. 11 + 12 + ## Usage 13 + 14 + ```bash 15 + s say "build finished, all tests green" 16 + s say "need your input on the migration plan" 17 + s say # default: "Attention requested." 18 + ``` 19 + 20 + ## When to use 21 + 22 + - A long-running build, test, or deploy just finished — tell the user the 23 + outcome. 24 + - You hit a question that requires a human decision and can't proceed without 25 + it. 26 + - An error or unexpected state needs review before you continue. 27 + 28 + ## When NOT to use 29 + 30 + - Routine updates that the user can read in the transcript at their own pace. 31 + - Inside tight loops or after every tool call — the user will tune it out. 32 + - For anything sensitive: the message is spoken aloud and shown on the desktop, 33 + so don't read out secrets, tokens, or private data. 34 + 35 + ## Tips 36 + 37 + - Keep messages short — one sentence is plenty. flite reads slowly. 38 + - Lead with the outcome ("tests passed", "deploy failed", "need input"), not 39 + the context.
+16
skills/notify/default.nix
··· 1 + { stdenv, ... }: 2 + 3 + stdenv.mkDerivation { 4 + pname = "notify-skill"; 5 + version = "0.1.0"; 6 + src = ./.; 7 + 8 + installPhase = '' 9 + mkdir -p $out/share/notify 10 + cp SKILL.md $out/share/notify/SKILL.md 11 + ''; 12 + 13 + meta = { 14 + description = "Get the user's attention via TTS and desktop notification"; 15 + }; 16 + }
+1
tools/claude/CLAUDE.md
··· 14 14 - Do not include "claude" in commit messages. 15 15 - Take extra care not to commit lines with trailing whitespace. 16 16 - Use the `tmux` skill for long-running tasks. Use a session with a `claude-` prefix — create one if no idle session exists. 17 + - Use the `notify` skill (`s say "..."`) to get the user's attention when a long task finishes, you need input to continue, or something needs human review. 17 18 - Use git-mcp for advanced git operations (interactive staging, stash management, bisecting). 18 19 19 20 ## Nix
+2
tools/claude/flake-module.nix
··· 19 19 20 20 skills = { 21 21 hedgedoc = "${self.legacyPackages.${system}.skills.hedgedoc}/share/hedgedoc"; 22 + notify = "${self.legacyPackages.${system}.skills.notify}/share/notify"; 22 23 reverse-engineering = "${ 23 24 self.legacyPackages.${system}.skills.reverse-engineering 24 25 }/share/reverse-engineering"; ··· 121 122 "Bash(kagi-search:*)" 122 123 "Bash(curl:*)" 123 124 "Bash(tmux:*)" 125 + "Bash(s:*)" 124 126 # file edits 125 127 "Edit" 126 128 "Write"
+17
tools/say/flake-module.nix
··· 1 + { ... }: 2 + { 3 + perSystem = 4 + { pkgs, ... }: 5 + { 6 + packages.say = 7 + (pkgs.writeShellApplication { 8 + name = "say"; 9 + runtimeInputs = [ 10 + pkgs.flite 11 + pkgs.libnotify 12 + ]; 13 + text = builtins.readFile ./say.sh; 14 + }).overrideAttrs 15 + { passthru.usage = builtins.readFile ./usage.kdl; }; 16 + }; 17 + }
+14
tools/say/say.sh
··· 1 + #!/usr/bin/env bash 2 + set -euo pipefail 3 + 4 + if [ $# -eq 0 ]; then 5 + message="Attention requested." 6 + else 7 + message="$*" 8 + fi 9 + 10 + if command -v notify-send >/dev/null 2>&1; then 11 + notify-send -a "say" "$message" || true 12 + fi 13 + 14 + flite -t "$message"
+4
tools/say/usage.kdl
··· 1 + bin "say" 2 + about "Speak a message via TTS and post a desktop notification to get the user's attention" 3 + 4 + arg "[message...]" help="Message to speak (default: 'Attention requested.')"