.claude/skills/webhook/SKILL.md
# /webhook --- name: webhook description: Manage webhook sources - list, add, test, and view incoming events context: fork triggers: - webhook - add webhook - create webhook - webhook setup - incoming webhooks --- Manage the webhook receiver system. Use this skill to add new webhook sources, test existing ones, and view incoming events. ## What You Can Do 1. **List sources** - Show all registered webhook sources 2. **Add source** - Create a new webhook source with secure secret 3.
npx skillsauth add claudeaceae/samara-main .claude/skills/webhookInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
name: webhook description: Manage webhook sources - list, add, test, and view incoming events context: fork triggers:
Manage the webhook receiver system. Use this skill to add new webhook sources, test existing ones, and view incoming events.
https://webhooks.organelle.cocredential get webhook-secrets)~/.claude-mind/system/senses/| Endpoint | Method | Purpose |
|----------|--------|---------|
| /webhook/{source} | POST | Receive webhook from source |
| /health | GET | Health check |
| /status | GET | Show registered sources |
Read and display the webhook configuration:
~/.claude-mind/system/bin/credential get webhook-secrets | jq .
Also check service status:
curl -s https://webhooks.organelle.co/status | jq .
Ask for source name (lowercase, no spaces - e.g., "ifttt", "home-assistant", "backup-server")
Generate a secure secret:
openssl rand -hex 32
The new source should have this structure:
{
"secret": "<generated-secret>",
"allowed_ips": null,
"rate_limit": "30/minute"
}
For IP-restricted sources (more secure), ask if they want to limit to specific IPs.
Generate and send a signed test webhook:
SOURCE="<source-name>"
SECRET=$(~/.claude-mind/system/bin/credential get webhook-secrets | jq -r ".sources.\"$SOURCE\".secret")
PAYLOAD='{"event":"test","message":"Test webhook from skill","timestamp":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'"}'
SIGNATURE=$(echo -n "$PAYLOAD" | openssl dgst -sha256 -hmac "$SECRET" | cut -d' ' -f2)
curl -s -X POST "https://webhooks.organelle.co/webhook/$SOURCE" \
-H "Content-Type: application/json" \
-H "X-Hub-Signature-256: sha256=$SIGNATURE" \
-d "$PAYLOAD" | jq .
Then check the created event:
ls -lt ~/.claude-mind/system/senses/webhook-*.json | head -3
# List recent webhook events
ls -lt ~/.claude-mind/system/senses/webhook-*.json 2>/dev/null | head -10
# Show content of most recent
cat $(ls -t ~/.claude-mind/system/senses/webhook-*.json 2>/dev/null | head -1) | jq .
Provide these instructions based on what service the user wants to connect:
https://webhooks.organelle.co/webhook/iftttX-Webhook-Secret: <their-secret>{
"trigger": "<<<{{EventName}}>>>",
"occurred_at": "<<<{{OccurredAt}}>>>",
"data": {}
}
Note: IFTTT uses simple secret header, not HMAC signing.
https://webhooks.organelle.co/webhook/github<their-secret>configuration.yaml, add a REST command:rest_command:
notify_claude:
url: "https://webhooks.organelle.co/webhook/home-assistant"
method: POST
headers:
Content-Type: application/json
X-Webhook-Secret: "<their-secret>"
payload: '{"event": "{{ event }}", "data": {{ data | to_json }}}'
service: rest_command.notify_claude
data:
event: "motion_detected"
data:
location: "front_door"
Create a shortcut with "Get Contents of URL" action:
https://webhooks.organelle.co/webhook/shortcut<their-secret>#!/bin/bash
SECRET="<your-secret>"
PAYLOAD='{"event":"your_event","data":{}}'
SIGNATURE=$(echo -n "$PAYLOAD" | openssl dgst -sha256 -hmac "$SECRET" | cut -d' ' -f2)
curl -X POST https://webhooks.organelle.co/webhook/your-source \
-H "Content-Type: application/json" \
-H "X-Hub-Signature-256: sha256=$SIGNATURE" \
-d "$PAYLOAD"
Or simpler (less secure, but works):
curl -X POST https://webhooks.organelle.co/webhook/your-source \
-H "Content-Type: application/json" \
-H "X-Webhook-Secret: <your-secret>" \
-d '{"event":"ping"}'
The webhook receiver supports two authentication methods:
Used by GitHub and security-conscious services. Send X-Hub-Signature-256 header:
X-Hub-Signature-256: sha256=<hmac-sha256-of-body-using-secret>
For services that can't compute HMAC (like IFTTT). Send X-Webhook-Secret header:
X-Webhook-Secret: <your-secret>
Incoming webhooks become "sense events" in ~/.claude-mind/system/senses/. The SenseRouter picks these up and can:
You can customize priority in the webhook receiver's determine_priority() function, but defaults are:
| Source | Condition | Priority |
|--------|-----------|----------|
| GitHub | Security-related | immediate |
| GitHub | PR/issue actions | normal |
| Any | Default | normal |
curl -s https://webhooks.organelle.co/health | jq .
curl -s https://webhooks.organelle.co/status | jq .
tail -50 ~/.claude-mind/system/logs/webhook-receiver.log
X-Webhook-SecretIf using IP allowlist, check the allowed_ips in config. Cloudflare IPs may differ from original source.
testing
Check crypto wallet balances, transaction history, and addresses
testing
# /voice-call - FaceTime Voice Calling Place and receive FaceTime Audio calls with live transcription and voice/text responses. ## Quick Start ```bash # Full voice conversation (responds via FaceTime audio) ~/.claude-mind/system/bin/voice-call --voice-response # Call with text responses (via iMessage) ~/.claude-mind/system/bin/voice-call --text-response # Call a specific number ~/.claude-mind/system/bin/voice-call +15551234567 --voice-response ``` ## Prerequisites Run `audio-setup --check
tools
--- name: sync description: Check for drift between repo and running system. Use when checking if scripts or Samara are out of sync, verifying system integrity, or before/after rebuilds. Trigger words: sync, organism sync, check drift, system drift, repo sync. context: fork allowed-tools: - Bash - Read - Grep --- # Sync Skill Check for drift between the repo and running system, and optionally fix it. ## What This Does Runs the `sync-organism` script to detect differences between: - `~/
tools
--- name: stream description: Query the unified event stream for recent activity across all surfaces. Use when user asks about recent conversations, what happened on iMessage/CLI/wake cycles, or wants to see cross-surface activity. Trigger words: stream, recent activity, what happened, iMessage today, CLI earlier, recent conversations, cross-surface. context: fork allowed-tools: - Bash - Read --- # Unified Event Stream Query This skill provides on-demand access to the unified event stream