iResponder
by @koba42corp
Monitor iMessage/SMS conversations and auto-respond based on configurable rules, AI prompts, and rate-limiting conditions. Use when you need to automatically reply to specific contacts with AI-generated responses based on conversation context. Also use when the user asks to manage auto-responder settings, contacts, prompts, or view status/history.
clawhub install autoresponderπ About This Skill
name: imsg-autoresponder description: Monitor iMessage/SMS conversations and auto-respond based on configurable rules, AI prompts, and rate-limiting conditions. Use when you need to automatically reply to specific contacts with AI-generated responses based on conversation context. Also use when the user asks to manage auto-responder settings, contacts, prompts, or view status/history.
iMessage Auto-Responder
Automatically respond to iMessages/SMS from specific contacts using AI-generated replies that match your voice and conversation context.
β οΈ Requirements Checklist
Before using this skill, ensure you have:
brew install steipete/tap/imsgFeatures
Quick Start
1. Add contacts to watch list
cd ~/clawd/imsg-autoresponder/scripts
node manage.js add "+15551234567" "Reply with a middle finger emoji" "Best Friend"
node manage.js add "+15559876543" "You are my helpful assistant. Reply warmly and briefly, as if I'm responding myself. Keep it under 160 characters." "Mom"
2. Start the watcher
node watcher.js
The watcher runs in the foreground and logs to ~/clawd/logs/imsg-autoresponder.log.
3. Run in background (recommended)
# Start in background
nohup node ~/clawd/imsg-autoresponder/scripts/watcher.js > /dev/null 2>&1 &Or use screen/tmux
screen -S imsg-watcher
node ~/clawd/imsg-autoresponder/scripts/watcher.js
Ctrl+A, D to detach
Configuration
Config file: ~/clawd/imsg-autoresponder.json
{
"enabled": true,
"defaultMinMinutesBetweenReplies": 15,
"watchList": [
{
"identifier": "+15551234567",
"name": "Best Friend",
"prompt": "Reply with a middle finger emoji",
"minMinutesBetweenReplies": 10,
"enabled": true
}
]
}
Management via Telegram (Recommended)
The auto-responder can be managed directly through Telegram using slash commands or natural language.
Slash Commands
Both space and underscore formats are supported:
/autorespond list OR /autorespond_list
/autorespond status OR /autorespond_status
/autorespond add OR /autorespond_add
/autorespond remove OR /autorespond_remove
/autorespond edit OR /autorespond_edit
/autorespond delay OR /autorespond_delay
/autorespond history OR /autorespond_history
/autorespond test OR /autorespond_test
/autorespond toggle OR /autorespond_toggle
/autorespond restart OR /autorespond_restartBulk Operations:
/autorespond set-all-delays OR /autorespond_set_all_delays
/autorespond enable-all OR /autorespond_enable_all
/autorespond disable-all OR /autorespond_disable_all
Time Windows:
/autorespond set-time-window OR /autorespond_set_time_window
/autorespond clear-time-windows OR /autorespond_clear_time_windows
Keyword Triggers:
/autorespond add-keyword OR /autorespond_add_keyword
/autorespond remove-keyword OR /autorespond_remove_keyword
/autorespond clear-keywords OR /autorespond_clear_keywords
Statistics & Limits:
/autorespond stats OR /autorespond_stats []
/autorespond set-daily-cap OR /autorespond_set_daily_cap
Examples:
/autorespond_list
/autorespond_status
/autorespond_edit +15551234567 Be more sarcastic
/autorespond_delay +15551234567 30
/autorespond_history +15551234567
/autorespond_set_time_window +15551234567 09:00 22:00
/autorespond_clear_time_windows +15551234567
/autorespond_add_keyword +15551234567 urgent
/autorespond_add_keyword +15551234567 help
/autorespond_clear_keywords +15551234567
/autorespond_stats
/autorespond_stats +15551234567
/autorespond_set_daily_cap +15551234567 10
/autorespond_set_all_delays 30
/autorespond_disable_all
/autorespond_restart
Natural Language
You can also just ask naturally:
The agent will understand and execute the command using the telegram-handler.js script.
Command-Line Management (Advanced)
cd ~/clawd/imsg-autoresponder/scriptsList all contacts
node manage.js listAdd contact
node manage.js add "+15551234567" "Your custom prompt here" "Optional Name"Remove contact
node manage.js remove "+15551234567"Enable/disable contact
node manage.js enable "+15551234567"
node manage.js disable "+15551234567"Set custom delay for contact (in minutes)
node manage.js set-delay "+15551234567" 30Toggle entire system on/off
node manage.js toggle
How It Works
1. Watcher monitors all incoming messages via imsg watch
2. Checks watch list to see if sender is configured for auto-response
3. Rate limiting ensures we don't spam (configurable minutes between replies)
4. Fetches message history for the conversation (last 20 messages)
5. Generates AI response using Clawdbot + the contact's configured prompt
6. Sends reply via imsg send
7. Logs everything to ~/clawd/logs/imsg-autoresponder.log
State Tracking
Response times are tracked in ~/clawd/data/imsg-autoresponder-state.json:
{
"lastResponses": {
"+15551234567": 1706453280000
}
}
This ensures rate limiting works correctly across restarts.
Prompts
Prompts define how the AI should respond to each contact. Be specific!
Examples:
"Reply with a middle finger emoji""You are my helpful assistant. Reply warmly and briefly, as if I'm responding myself. Keep it under 160 characters."
"You are my sarcastic friend. Reply with witty, slightly snarky responses. Keep it short."
"Politely decline any requests and say I'm busy. Be brief but friendly."
The AI will see:
Requirements
imsg CLI installed (brew install steipete/tap/imsg)~/.clawdbot/clawdbot.json or ANTHROPIC_API_KEY env var)curl (pre-installed on macOS)Safety
enabled: false in config or node manage.js disable node manage.js toggleTroubleshooting
Watcher not responding:
~/clawd/logs/imsg-autoresponder.log for errorsimsg watch works manually: imsg watch --jsonnode manage.js listRate limited too aggressively:
node manage.js set-delay "+15551234567" 5defaultMinMinutesBetweenReplies in configAI responses are off:
Agent Command Handling
When the user uses slash commands or natural language about the auto-responder, use the telegram-handler.js script.
Command Mapping (Both Formats Supported)
| User Input | Normalize To | Handler Call |
|------------|--------------|--------------|
| /autorespond list or /autorespond_list | list | node telegram-handler.js list |
| /autorespond status or /autorespond_status | status | node telegram-handler.js status |
| /autorespond add or /autorespond_add | add | node telegram-handler.js add |
| /autorespond remove or /autorespond_remove | remove | node telegram-handler.js remove |
| /autorespond edit or /autorespond_edit | edit | node telegram-handler.js edit |
| /autorespond delay or /autorespond_delay | delay | node telegram-handler.js delay |
| /autorespond history or /autorespond_history | history | node telegram-handler.js history |
| /autorespond test or /autorespond_test | test | node telegram-handler.js test |
| /autorespond toggle or /autorespond_toggle | toggle | node telegram-handler.js toggle |
| /autorespond restart or /autorespond_restart | restart | node telegram-handler.js restart |
| /autorespond set-all-delays or /autorespond_set_all_delays | set-all-delays | node telegram-handler.js set-all-delays |
| /autorespond enable-all or /autorespond_enable_all | enable-all | node telegram-handler.js enable-all |
| /autorespond disable-all or /autorespond_disable_all | disable-all | node telegram-handler.js disable-all |
| /autorespond set-time-window or /autorespond_set_time_window | set-time-window | node telegram-handler.js set-time-window |
| /autorespond clear-time-windows or /autorespond_clear_time_windows | clear-time-windows | node telegram-handler.js clear-time-windows |
| /autorespond add-keyword or /autorespond_add_keyword | add-keyword | node telegram-handler.js add-keyword |
| /autorespond remove-keyword or /autorespond_remove_keyword | remove-keyword | node telegram-handler.js remove-keyword |
| /autorespond clear-keywords or /autorespond_clear_keywords | clear-keywords | node telegram-handler.js clear-keywords |
| /autorespond stats or /autorespond_stats [ | stats | node telegram-handler.js stats [ |
| /autorespond set-daily-cap or /autorespond_set_daily_cap | set-daily-cap | node telegram-handler.js set-daily-cap |
Processing steps:
1. Detect /autorespond or /autorespond_ prefix
2. Extract subcommand (normalize underscores to spaces)
3. Parse remaining arguments
4. Call telegram-handler.js with appropriate parameters
Natural Language Pattern Matching
node telegram-handler.js listnode telegram-handler.js add node telegram-handler.js edit node telegram-handler.js delay node telegram-handler.js remove node telegram-handler.js statusnode telegram-handler.js history node telegram-handler.js restartnode telegram-handler.js toggleContact resolution:
+15551234567)After config changes: Always remind the user to restart the watcher if the command output mentions it.
Troubleshooting
Watcher Not Responding
Check status:
/autorespond_status
View logs:
tail -f ~/clawd/logs/imsg-autoresponder.log
Restart:
/autorespond_restart
Common Issues
"OPENAI_API_KEY not found"
~/.clawdbot/clawdbot.json: {
"skills": {
"openai-whisper-api": {
"apiKey": "sk-proj-YOUR_KEY_HERE"
}
}
}
Permission errors
imsg chats --json works manuallyMessages not detected
/autorespond_list/autorespond_statusDuplicate responses
/autorespond_restartTesting
Generate actual AI responses without sending (preview mode):
/autorespond_test +15551234567 Hey what's up?
This will:
Perfect for testing new prompts before going live!
Privacy & Safety
β οΈ Important: This tool sends messages on your behalf automatically.
/autorespond_history/autorespond_toggleFuture Enhancements
π‘ Examples
1. Add contacts to watch list
cd ~/clawd/imsg-autoresponder/scripts
node manage.js add "+15551234567" "Reply with a middle finger emoji" "Best Friend"
node manage.js add "+15559876543" "You are my helpful assistant. Reply warmly and briefly, as if I'm responding myself. Keep it under 160 characters." "Mom"
2. Start the watcher
node watcher.js
The watcher runs in the foreground and logs to ~/clawd/logs/imsg-autoresponder.log.
3. Run in background (recommended)
# Start in background
nohup node ~/clawd/imsg-autoresponder/scripts/watcher.js > /dev/null 2>&1 &Or use screen/tmux
screen -S imsg-watcher
node ~/clawd/imsg-autoresponder/scripts/watcher.js
Ctrl+A, D to detach
βοΈ Configuration
Config file: ~/clawd/imsg-autoresponder.json
{
"enabled": true,
"defaultMinMinutesBetweenReplies": 15,
"watchList": [
{
"identifier": "+15551234567",
"name": "Best Friend",
"prompt": "Reply with a middle finger emoji",
"minMinutesBetweenReplies": 10,
"enabled": true
}
]
}
π Tips & Best Practices
Watcher not responding:
~/clawd/logs/imsg-autoresponder.log for errorsimsg watch works manually: imsg watch --jsonnode manage.js listRate limited too aggressively:
node manage.js set-delay "+15551234567" 5defaultMinMinutesBetweenReplies in configAI responses are off: