diff options
| author | Craig Jennings <c@cjennings.net> | 2026-05-29 14:51:53 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-05-29 14:51:53 -0500 |
| commit | 664bf01ceaccf730cb636463cc8587cd1d966192 (patch) | |
| tree | e964f6c88d986454c5a2acfc99dfb55964fbba2b /Makefile | |
| parent | c3cf9a592ea6779ad59f0d79577e29777fce49f6 (diff) | |
| download | rulesets-664bf01ceaccf730cb636463cc8587cd1d966192.tar.gz rulesets-664bf01ceaccf730cb636463cc8587cd1d966192.zip | |
feat(signal): page-signal CLI wrapper + workflows + cross-project broadcast helper
Three coupled additions ship together.
claude-templates/bin/page-signal is a bash wrapper around signal-cli
send. It defaults to --note-to-self for safety. The wrapper supports
--file for attachments, --to <+number> for outbound (explicit per
call, no defaults, no batch), --quiet, and --json. Exit codes: 0
sent, 1 signal-cli failure, 2 usage error, 3 signal-cli not
installed.
claude-templates/.ai/workflows/page-signal.org carries the
discrimination rules and safety rails. When desktop notify covers it,
don't reach for Signal. Long-running task completion is the canonical
case. Outbound to other contacts requires explicit Craig instruction
per send. A known-limitation note covers the current notification
gap. signal-cli registered on Craig's primary number means messages
don't fire notifications until the pending Google Voice registration
lands.
claude-templates/.ai/workflows/cross-project-broadcast.org and its
helper cross-project-broadcast.py fan out a single message file to
every AI project's inbox in one operation. Discovery is
fingerprint-based: any directory under ~/code, ~/projects, ~/.emacs.d
with both .ai/protocols.org and a top-level inbox/ is broadcastable.
Senders are auto-excluded. Verified discovery against 23
broadcastable targets.
Makefile's install target gains a general bin/ loop. The previous
version hardcoded bin/ai. The new version iterates over every
executable under claude-templates/bin/ and symlinks each into
~/.local/bin/. install-hooks (existing Claude hook installer) is
unchanged. install-githooks (sync-check pre-commit hook setup, added
earlier today) is unchanged. The bin/ loop now picks up bin/page-signal
automatically.
INDEX entries for both new workflows landed under Tools and meta.
No bats tests on the new scripts. page-signal was smoke-tested with a
live send. The send succeeded. The notification gap is covered by the
workflow's known-limitation note. cross-project-broadcast.py was
smoke-tested via --list against the live project set. Tests can be
added when the broadcast pattern proves out across multiple use cases.
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 34 |
1 files changed, 19 insertions, 15 deletions
@@ -220,24 +220,28 @@ install: ## Symlink skills and rules into ~/.claude/ fi \ fi @echo "" - @echo "ai launcher:" + @echo "bin scripts:" @mkdir -p "$(LOCAL_BIN)" - @chmod +x "$(AI_LAUNCHER)" - @if [ -L "$(LOCAL_BIN)/ai" ]; then \ - target=$$(readlink "$(LOCAL_BIN)/ai"); \ - if [ "$$target" = "$(AI_LAUNCHER)" ]; then \ - echo " skip ai (already linked)"; \ + @for src in $(CURDIR)/claude-templates/bin/*; do \ + [ -f "$$src" ] || continue; \ + name=$$(basename "$$src"); \ + chmod +x "$$src"; \ + if [ -L "$(LOCAL_BIN)/$$name" ]; then \ + target=$$(readlink "$(LOCAL_BIN)/$$name"); \ + if [ "$$target" = "$$src" ]; then \ + echo " skip $$name (already linked)"; \ + else \ + rm "$(LOCAL_BIN)/$$name"; \ + ln -s "$$src" "$(LOCAL_BIN)/$$name"; \ + echo " relink $$name → $$src (was: $$target)"; \ + fi \ + elif [ -e "$(LOCAL_BIN)/$$name" ]; then \ + echo " WARN $$name exists and is not a symlink — skipping"; \ else \ - rm "$(LOCAL_BIN)/ai"; \ - ln -s "$(AI_LAUNCHER)" "$(LOCAL_BIN)/ai"; \ - echo " relink ai → $(AI_LAUNCHER) (was: $$target)"; \ + ln -s "$$src" "$(LOCAL_BIN)/$$name"; \ + echo " link $$name → $(LOCAL_BIN)/$$name"; \ fi \ - elif [ -e "$(LOCAL_BIN)/ai" ]; then \ - echo " WARN ai exists and is not a symlink — skipping"; \ - else \ - ln -s "$(AI_LAUNCHER)" "$(LOCAL_BIN)/ai"; \ - echo " link ai → $(LOCAL_BIN)/ai"; \ - fi + done @echo "" @echo "done" |
