aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-29 14:51:53 -0500
committerCraig Jennings <c@cjennings.net>2026-05-29 14:51:53 -0500
commit664bf01ceaccf730cb636463cc8587cd1d966192 (patch)
treee964f6c88d986454c5a2acfc99dfb55964fbba2b /Makefile
parentc3cf9a592ea6779ad59f0d79577e29777fce49f6 (diff)
downloadrulesets-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--Makefile34
1 files changed, 19 insertions, 15 deletions
diff --git a/Makefile b/Makefile
index abf28c1..01bd1ee 100644
--- a/Makefile
+++ b/Makefile
@@ -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"