.claude/skills/services/SKILL.md
# /services - Service Toggle System Manage which services are active in the Samara organism. Services can be toggled on/off without deleting code - they're simply unplugged from the wake cycle, sense routing, and launchd scheduling. ## Quick Commands ```bash # List all services with current status ~/.claude-mind/system/bin/service-toggle list # Toggle a service ~/.claude-mind/system/bin/service-toggle <service> on|off|status ``` ## Available Services | Service | Description | launchd Agent
npx skillsauth add claudeaceae/samara-main .claude/skills/servicesInstall 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.
Manage which services are active in the Samara organism. Services can be toggled on/off without deleting code - they're simply unplugged from the wake cycle, sense routing, and launchd scheduling.
# List all services with current status
~/.claude-mind/system/bin/service-toggle list
# Toggle a service
~/.claude-mind/system/bin/service-toggle <service> on|off|status
| Service | Description | launchd Agents |
|---------|-------------|----------------|
| x | X/Twitter mentions, replies, posting | x-watcher, x-engage |
| bluesky | Bluesky notifications, DMs, posting | bluesky-watcher, bluesky-engage |
| github | GitHub notifications | github-watcher |
| wallet | Crypto wallet monitoring | wallet-watcher |
| meeting | Calendar meeting prep/debrief | meeting-check |
| webhook | External webhook events | webhook-receiver |
| location | Location tracking | location-receiver |
| browserHistory | Browser history from É's devices | (client-side) |
| notesWatcher | Apple Notes scratchpad polling in Samara.app | (in-app only, no launchd agent) |
The service toggle system has three layers:
~/.claude-mind/system/config.json){
"services": {
"x": false,
"bluesky": false,
"github": true,
"wallet": true,
"meeting": true,
"webhook": true,
"location": true,
"browserHistory": true,
"notesWatcher": false
}
}
When Samara starts, SenseRouter.registerDefaultHandlers() checks config.servicesConfig.isEnabled() for each service. Disabled services don't get handlers registered, so their sense events are ignored.
The service-toggle script also manages launchd agents - when you disable a service, it unloads the corresponding agents so they stop polling/watching.
~/.claude-mind/system/bin/service-toggle list
Output:
Service Status:
---------------
x config: false launchd: unloaded
bluesky config: false launchd: unloaded
github config: true launchd: loaded
...
~/.claude-mind/system/bin/service-toggle x off
This will:
services.x = false in config.jsoncom.claude.x-watcher and com.claude.x-engage from launchd~/.claude-mind/system/bin/service-toggle bluesky on
This will:
services.bluesky = true in config.jsonpkill -x Samara && sleep 1 && open -a Samara
Or use the update-samara script if you also have code changes.
notesWatcher which defaults to false| File | Purpose |
|------|---------|
| ~/.claude-mind/system/config.json | Runtime config with services section |
| Samara/Samara/Configuration.swift | ServicesConfig struct and isEnabled() method |
| Samara/Samara/Mind/SenseRouter.swift | Checks config before registering handlers |
| scripts/service-toggle | CLI for toggling services |
Use the service toggle system when you want to:
The system is designed for clean plug/unplug without code changes.
All new senses and services MUST be toggleable. This is a hard requirement for any capability that polls external services, processes sense events, contributes to memory, or consumes tokens.
Configuration.swift - Add to ServicesConfig:
let myservice: Bool?
// In isEnabled():
case "myservice": return myservice ?? true
SenseRouter.swift - Guard the handler:
if services.isEnabled("myservice") {
handlers["myservice"] = { [weak self] event in
self?.handleMyServiceEvent(event)
}
}
scripts/service-toggle - Register the service:
# Add to SERVICES list:
SERVICES="x bluesky github wallet meeting webhook location myservice"
# Add to get_agents():
myservice) echo "com.claude.myservice-watcher" ;;
config.json - Add default (usually true):
"services": {
"myservice": true
}
This file - Add to the Available Services table above
The collaborator needs the ability to cleanly disable any service without touching code. This prevents:
See existing implementations (x, bluesky, wallet, meeting) for reference patterns.
development
# /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.
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: - `~/