skills$openclaw/imsg-autoresponder
koba42corp3.8kβ˜…

by koba42corp

imsg-autoresponder – OpenClaw Skill

imsg-autoresponder is an OpenClaw Skills integration for coding workflows. 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.

3.8k stars1.2k forksSecurity L1
Updated Feb 7, 2026Created Feb 7, 2026coding

Skill Snapshot

nameimsg-autoresponder
descriptionMonitor 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. OpenClaw Skills integration.
ownerkoba42corp
repositorykoba42corp/i-responder
languageMarkdown
licenseMIT
topics
securityL1
installopenclaw add @koba42corp/i-responder
last updatedFeb 7, 2026

Maintainer

koba42corp

koba42corp

Maintains imsg-autoresponder in the OpenClaw Skills directory.

View GitHub profile
File Explorer
12 files
.
config
autoresponder.example.json
553 B
scripts
launcher.sh
1.8 KB
manage.js
13.2 KB
telegram-handler.js
20.2 KB
watcher-old.js
8.5 KB
watcher.js
13.6 KB
_meta.json
277 B
CHANGELOG.md
1.4 KB
README.md
13.6 KB
SKILL.md
14.0 KB
SKILL.md

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:

  • macOS with Messages.app signed in to iMessage
  • imsg CLI installed: brew install steipete/tap/imsg
  • OpenAI API key configured in Clawdbot config
  • Full Disk Access granted to Terminal/iTerm
  • Messages automation permission (macOS will prompt on first use)

Features

  • πŸ€– AI-powered responses using OpenAI GPT-4
  • πŸ“± Contact-based prompts - different AI personality per contact
  • ⏱️ Rate limiting - configurable delays between auto-responses
  • πŸ’¬ Context-aware - AI sees recent conversation history
  • πŸ“Š Telegram management - slash commands + natural language
  • πŸ”„ Background monitoring - continuous polling for new messages
  • πŸ”§ Auto-cleanup - clears stale locks on restart (prevents stuck contacts)
  • πŸ§ͺ Test mode - generate real AI responses without sending
  • ⏰ Time windows - only respond during specific hours (e.g., 9 AM - 10 PM)
  • πŸ”‘ Keyword triggers - only respond if message contains specific keywords (e.g., "urgent", "help")
  • πŸ“Š Statistics tracking - track total responses, daily counts, and averages per contact
  • 🚦 Daily cap - limit max replies per day per contact (safety feature)

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"
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

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 <number> <name> <prompt>
/autorespond remove            OR  /autorespond_remove <number>
/autorespond edit              OR  /autorespond_edit <number> <prompt>
/autorespond delay             OR  /autorespond_delay <number> <minutes>
/autorespond history           OR  /autorespond_history <number>
/autorespond test              OR  /autorespond_test <number> <message>
/autorespond toggle            OR  /autorespond_toggle
/autorespond restart           OR  /autorespond_restart

Bulk Operations:
/autorespond set-all-delays    OR  /autorespond_set_all_delays <minutes>
/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 <number> <start> <end>
/autorespond clear-time-windows OR  /autorespond_clear_time_windows <number>

Keyword Triggers:
/autorespond add-keyword       OR  /autorespond_add_keyword <number> <keyword>
/autorespond remove-keyword    OR  /autorespond_remove_keyword <number> <keyword>
/autorespond clear-keywords    OR  /autorespond_clear_keywords <number>

Statistics & Limits:
/autorespond stats             OR  /autorespond_stats [<number>]
/autorespond set-daily-cap     OR  /autorespond_set_daily_cap <number> <max>

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:

  • "Show me the auto-responder status"
  • "Add +15551234567 to the watch list with prompt: be sarcastic"
  • "Change Scott's prompt to be nicer"
  • "Disable auto-replies for Mom"
  • "What has the auto-responder sent to Foxy recently?"
  • "Restart the auto-responder"

The agent will understand and execute the command using the telegram-handler.js script.

Command-Line Management (Advanced)

cd ~/clawd/imsg-autoresponder/scripts

# List all contacts
node manage.js list

# Add 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" 30

# Toggle 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:

  • The contact's custom prompt
  • Recent message history (last 5 messages)
  • The latest incoming message

Requirements

  • macOS with Messages.app signed in
  • imsg CLI installed (brew install steipete/tap/imsg)
  • Full Disk Access for Terminal
  • Clawdbot installed and configured
  • Anthropic API key (configured in ~/.clawdbot/clawdbot.json or ANTHROPIC_API_KEY env var)
  • curl (pre-installed on macOS)

Safety

  • Rate limiting prevents spam (default: 15 minutes between replies per contact)
  • Manual override via enabled: false in config or node manage.js disable <number>
  • System toggle to disable all auto-responses: node manage.js toggle
  • Logs track all activity for review

Troubleshooting

Watcher not responding:

  • Check ~/clawd/logs/imsg-autoresponder.log for errors
  • Verify imsg watch works manually: imsg watch --json
  • Ensure contact is in watch list: node manage.js list

Rate limited too aggressively:

  • Adjust delay: node manage.js set-delay "+15551234567" 5
  • Or edit defaultMinMinutesBetweenReplies in config

AI responses are off:

  • Refine the prompt for that contact
  • Check message history is being captured correctly (see logs)

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 InputNormalize ToHandler Call
/autorespond list or /autorespond_listlistnode telegram-handler.js list
/autorespond status or /autorespond_statusstatusnode telegram-handler.js status
/autorespond add or /autorespond_add <args>addnode telegram-handler.js add <number> <name> <prompt>
/autorespond remove or /autorespond_remove <num>removenode telegram-handler.js remove <number>
/autorespond edit or /autorespond_edit <args>editnode telegram-handler.js edit <number> <prompt>
/autorespond delay or /autorespond_delay <args>delaynode telegram-handler.js delay <number> <minutes>
/autorespond history or /autorespond_history <num>historynode telegram-handler.js history <number> [limit]
/autorespond test or /autorespond_test <num> <msg>testnode telegram-handler.js test <number> <message>
/autorespond toggle or /autorespond_toggletogglenode telegram-handler.js toggle
/autorespond restart or /autorespond_restartrestartnode telegram-handler.js restart
/autorespond set-all-delays or /autorespond_set_all_delays <min>set-all-delaysnode telegram-handler.js set-all-delays <minutes>
/autorespond enable-all or /autorespond_enable_allenable-allnode telegram-handler.js enable-all
/autorespond disable-all or /autorespond_disable_alldisable-allnode telegram-handler.js disable-all
/autorespond set-time-window or /autorespond_set_time_window <num> <s> <e>set-time-windownode telegram-handler.js set-time-window <number> <start> <end>
/autorespond clear-time-windows or /autorespond_clear_time_windows <num>clear-time-windowsnode telegram-handler.js clear-time-windows <number>
/autorespond add-keyword or /autorespond_add_keyword <num> <word>add-keywordnode telegram-handler.js add-keyword <number> <keyword>
/autorespond remove-keyword or /autorespond_remove_keyword <num> <word>remove-keywordnode telegram-handler.js remove-keyword <number> <keyword>
/autorespond clear-keywords or /autorespond_clear_keywords <num>clear-keywordsnode telegram-handler.js clear-keywords <number>
/autorespond stats or /autorespond_stats [<num>]statsnode telegram-handler.js stats [<number>]
/autorespond set-daily-cap or /autorespond_set_daily_cap <num> <max>set-daily-capnode telegram-handler.js set-daily-cap <number> <max>

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

  • "show/list/view auto-responder" β†’ node telegram-handler.js list
  • "add [contact] to auto-responder" β†’ node telegram-handler.js add <number> <name> <prompt>
  • "change/edit/update [contact]'s prompt" β†’ node telegram-handler.js edit <number> <prompt>
  • "set delay for [contact]" β†’ node telegram-handler.js delay <number> <minutes>
  • "disable/remove [contact] from auto-responder" β†’ node telegram-handler.js remove <number>
  • "auto-responder status" β†’ node telegram-handler.js status
  • "what has auto-responder sent to [contact]" β†’ node telegram-handler.js history <number>
  • "restart auto-responder" β†’ node telegram-handler.js restart
  • "enable/disable auto-responder" β†’ node telegram-handler.js toggle

Contact resolution:

  • When user refers to contact names, look up their phone number from the config
  • Always use the full E.164 format (e.g., +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"

  • Add API key to ~/.clawdbot/clawdbot.json:
    {
      "skills": {
        "openai-whisper-api": {
          "apiKey": "sk-proj-YOUR_KEY_HERE"
        }
      }
    }
    
  • Restart watcher after adding key

Permission errors

  • Grant Full Disk Access to Terminal in System Settings
  • Restart Terminal after granting access
  • Verify imsg chats --json works manually

Messages not detected

  • Check Messages.app is signed in
  • Verify contact is in watch list: /autorespond_list
  • Ensure watcher is running: /autorespond_status

Duplicate responses

  • Fixed in current version via processing locks
  • Restart watcher to apply fix: /autorespond_restart

Testing

Generate actual AI responses without sending (preview mode):

/autorespond_test +15551234567 Hey what's up?

This will:

  • Use the contact's actual prompt
  • Generate a real AI response via OpenAI
  • Show exactly what would be sent
  • NOT actually send the message

Perfect for testing new prompts before going live!

Privacy & Safety

⚠️ Important: This tool sends messages on your behalf automatically.

  • Only add contacts who know they're texting an AI or won't mind
  • Review responses regularly via /autorespond_history
  • Use rate limiting to avoid spam
  • Be transparent when appropriate
  • Disable instantly if needed: /autorespond_toggle

Future Enhancements

  • Smart rate limiting based on conversation patterns
  • Group chat support
  • Web dashboard
  • Voice message transcription
README.md

πŸ“± iMessage Auto-Responder

Automatically respond to iMessages and SMS from specific contacts using AI-generated replies that match your voice and conversation context.

License: MIT Platform: macOS Node.js: v14+


✨ Features

FeatureDescription
πŸ€– AI-PoweredOpenAI GPT-4 generates contextual, natural responses
πŸ“± Contact-Based PromptsDifferent AI personality per contact
⏱️ Rate LimitingConfigurable delays between auto-responses
πŸ’¬ Context-AwareAI sees recent conversation history for better replies
πŸ“Š Telegram ManagementFull control via slash commands or natural language
πŸ”„ Background MonitoringRuns continuously via polling (5-second intervals)
πŸ“ Activity LoggingTrack what was sent and when
πŸ”§ Auto-CleanupClears stale processing locks on restart
πŸ§ͺ Test ModePreview AI responses without sending
⏰ Time WindowsOnly respond during specific hours (e.g., 9 AM - 10 PM)
πŸ”‘ Keyword TriggersOnly respond if message contains specific keywords
πŸ“Š Statistics TrackingTrack total responses, daily counts, averages
🚦 Daily Reply CapLimit max replies per day per contact (safety feature)

πŸ“‹ Requirements

System Requirements

  • βœ… macOS with Messages.app signed in to iMessage
  • βœ… Node.js v14+ (included with Clawdbot)
  • βœ… Full Disk Access for Terminal/iTerm
  • βœ… Messages automation permission (macOS prompts on first use)

Dependencies

1. imsg CLI

iMessage command-line tool by Peter Steinberger:

brew install steipete/tap/imsg

Add to your Clawdbot config (~/.clawdbot/clawdbot.json):

{
  "skills": {
    "openai-whisper-api": {
      "apiKey": "sk-proj-YOUR_KEY_HERE"
    }
  }
}

πŸ”— Get your API key: https://platform.openai.com/api-keys

3. macOS Permissions

Grant the following permissions:

  1. Full Disk Access for Terminal/iTerm:

    • System Settings β†’ Privacy & Security β†’ Full Disk Access
    • Add Terminal.app or iTerm.app
    • Restart Terminal after granting
  2. Messages Automation (macOS will prompt automatically on first send)


Installation

Via ClawdHub (Recommended)
clawdhub install imsg-autoresponder
Manual Installation
  1. Download imsg-autoresponder.skill
  2. Install:
    clawdbot skill install imsg-autoresponder.skill
    

Setup

1️⃣ Add Your First Contact

Via Telegram:

/autorespond_add +15551234567 "Best Friend" "Reply with sarcastic humor"

Or naturally:

Add +15551234567 to the auto-responder with name "Best Friend" and prompt "Reply with sarcastic humor"
2️⃣ Start the Watcher
cd ~/clawd/imsg-autoresponder/scripts
./launcher.sh start

Or via Telegram:

/autorespond_restart
3️⃣ Test It!

Have the contact text you. The auto-responder will reply within 5 seconds (default polling interval).


πŸ’¬ Usage

Telegram Commands

All commands support both space and underscore formats:

Core Commands
CommandDescription
/autorespond list or /autorespond_listShow all contacts on watch list
/autorespond status or /autorespond_statusShow watcher process status
/autorespond add or /autorespond_add <number> <name> <prompt>Add new contact
/autorespond edit or /autorespond_edit <number> <prompt>Edit contact's prompt
/autorespond remove or /autorespond_remove <number>Remove contact
/autorespond delay or /autorespond_delay <number> <minutes>Set reply delay
/autorespond history or /autorespond_history <number>Show response history
/autorespond test or /autorespond_test <number> <message>Test without sending
/autorespond toggle or /autorespond_toggleEnable/disable system
/autorespond restart or /autorespond_restartRestart watcher process
Bulk Operations
CommandDescription
/autorespond set-all-delays <minutes>Set delay for all contacts
/autorespond enable-allEnable all contacts
/autorespond disable-allDisable all contacts
Time Windows

Control when auto-responses are active (per contact):

CommandDescription
/autorespond set-time-window <number> <start> <end>Add time window (e.g., 09:00 22:00)
/autorespond clear-time-windows <number>Clear all time windows

Examples:

/autorespond_set_time_window +15551234567 09:00 22:00
/autorespond_set_time_window +15551234567 08:00 12:00
/autorespond_clear_time_windows +15551234567
Keyword Triggers

Only respond when messages contain specific keywords (case-insensitive):

CommandDescription
/autorespond add-keyword <number> <keyword>Add keyword trigger
/autorespond remove-keyword <number> <keyword>Remove keyword
/autorespond clear-keywords <number>Clear all keywords

Examples:

/autorespond_add_keyword +15551234567 urgent
/autorespond_add_keyword +15551234567 help
/autorespond_remove_keyword +15551234567 urgent
/autorespond_clear_keywords +15551234567

How it works: If no keywords are set, responds to all messages (after rate limiting). If keywords exist, only responds when message contains at least one keyword.

Statistics & Limits
CommandDescription
/autorespond stats [<number>]View response statistics (all or specific contact)
/autorespond set-daily-cap <number> <max>Set max replies per day (0 = unlimited)

Examples:

/autorespond_stats
/autorespond_stats +15551234567
/autorespond_set_daily_cap +15551234567 10

Natural Language Control

Just ask your Clawdbot agent naturally:

  • "Show me the auto-responder status"
  • "Add my brother Scott to the watch list"
  • "Change Mom's prompt to be more casual"
  • "What has the auto-responder sent to Foxy?"
  • "Disable auto-replies for Scott"
  • "Only respond to Scott if he says 'help'"

βš™οΈ Configuration

Time Windows

Restrict auto-responses to specific hours per contact:

# Only respond between 9 AM and 10 PM
/autorespond_set_time_window +15551234567 09:00 22:00

# Add multiple windows (morning and evening)
/autorespond_set_time_window +15551234567 08:00 12:00
/autorespond_set_time_window +15551234567 17:00 23:00

# Remove all time windows (respond 24/7)
/autorespond_clear_time_windows +15551234567

Use Cases:

  • βœ… Respect work hours (only respond 9-5)
  • βœ… Avoid late night texts (cutoff at 10 PM)
  • βœ… Weekend-only responses
  • βœ… Different hours per contact

Keyword Triggers

Only respond when messages contain specific keywords:

# Only respond if message contains "urgent" or "help"
/autorespond_add_keyword +15551234567 urgent
/autorespond_add_keyword +15551234567 help

# Add "emergency" keyword for Mom
/autorespond_add_keyword +19028778490 emergency

# Remove a keyword
/autorespond_remove_keyword +15551234567 urgent

# Clear all keywords (respond to all messages)
/autorespond_clear_keywords +15551234567

Use Cases:

  • βœ… Only respond to urgent/important messages
  • βœ… Filter casual vs. serious conversations
  • βœ… Require explicit trigger words ("help", "question", "emergency")
  • βœ… Different keywords per contact

Statistics Tracking

View response statistics:

# All contacts
/autorespond_stats

# Specific contact
/autorespond_stats +15551234567

Tracked Metrics:

  • Total responses (all-time)
  • Daily count (today)
  • Average responses per day
  • First and last response dates

Daily Reply Cap

Limit auto-replies per contact per day:

# Set max 10 replies per day for Scott
/autorespond_set_daily_cap +15551234567 10

# Remove limit (unlimited)
/autorespond_set_daily_cap +15551234567 0

Use Cases:

  • βœ… Prevent spam if someone texts repeatedly
  • βœ… Safety cap during testing
  • βœ… Different limits per contact
  • βœ… Protects against runaway conversations

Prompt Engineering

Prompts define how the AI responds. Be specific!

Good Examples:

"Reply with only a middle finger emoji"

"You are Drac's AI. Match their energy - vulgar with vulgar, 
serious with serious. Keep it short and natural."

"Be polite and helpful. Keep responses under 160 characters."

"Respond as if you're my assistant. Professional but warm. 
If they ask about my availability, check my calendar."

Rate Limiting

Control reply frequency:

# 30 minutes between replies
/autorespond_delay +15551234567 30

# Instant replies (testing only!)
/autorespond_delay +15551234567 0

πŸ”§ Troubleshooting

Watcher Not Responding

Check status:

/autorespond_status

Restart if needed:

/autorespond_restart

Check logs:

tail -f ~/clawd/logs/imsg-autoresponder.log

Common Issues

❌ "OPENAI_API_KEY not found"

Solution: Add API key to ~/.clawdbot/clawdbot.json:

{
  "skills": {
    "openai-whisper-api": {
      "apiKey": "sk-proj-YOUR_KEY_HERE"
    }
  }
}

Restart watcher after adding.

❌ "Permission denied" / "Operation not permitted"

Solution:

  1. Grant Full Disk Access to Terminal
  2. System Settings β†’ Privacy & Security β†’ Full Disk Access
  3. Add Terminal.app
  4. Restart Terminal
❌ Messages not being detected

Solution:

  1. Verify imsg watch --json works manually
  2. Check Messages.app is signed in
  3. Confirm contact is in watch list: /autorespond_list
❌ Responses are too long/verbose

Solution: Edit prompt to emphasize brevity:

/autorespond_edit +15551234567 Keep replies to 1-2 sentences max. Be concise.

Testing Without Sending

Preview real AI responses without sending:

/autorespond_test +15551234567 Hey what's up?

Perfect for testing new prompts before going live! βœ…


πŸ—οΈ Architecture

Components

  • watcher.js - Background polling process that monitors iMessages
  • manage.js - CLI for configuration management
  • telegram-handler.js - Telegram command interface
  • launcher.sh - Start/stop/status helper script

How It Works

graph LR
    A[Polling Loop] --> B[Check New Messages]
    B --> C{On Watch List?}
    C -->|No| A
    C -->|Yes| D{Rate Limit OK?}
    D -->|No| A
    D -->|Yes| E{Keywords Match?}
    E -->|No| A
    E -->|Yes| F[Fetch History]
    F --> G[Generate AI Response]
    G --> H[Send Reply]
    H --> I[Update State]
    I --> A
  1. Polling loop checks imsg chats every 5 seconds
  2. New messages detected by comparing timestamps
  3. Rate limiting prevents spam (configurable delay per contact)
  4. Processing lock prevents duplicate responses during AI generation
  5. OpenAI API generates contextual responses using conversation history
  6. Response sent via imsg send
  7. State saved (last response time, last checked time)

Data Storage

FilePurpose
~/clawd/imsg-autoresponder.jsonConfiguration (watch list, prompts)
~/clawd/data/imsg-autoresponder-state.jsonState tracking (last response times)
~/clawd/logs/imsg-autoresponder.logActivity logs
~/clawd/data/imsg-autoresponder.pidProcess ID file

πŸ›‘οΈ Safety Features

  • βœ… Rate limiting prevents spam (configurable per contact)
  • βœ… Processing locks prevent duplicate sends
  • βœ… Manual override - disable any contact instantly
  • βœ… System toggle - pause all auto-responses
  • βœ… Full logging - review everything that was sent
  • βœ… Test mode - preview responses before enabling
  • βœ… Daily caps - limit max replies per day
  • βœ… Time windows - only respond during specific hours
  • βœ… Keyword triggers - require specific words to respond

πŸ—ΊοΈ Roadmap

  • Time windows (only respond during certain hours) - v1.1
  • Keyword triggers (only respond if message contains specific words) - v1.1
  • Statistics tracking (response counts, daily totals) - v1.1
  • Max replies per day cap - v1.1
  • Smart rate limiting based on conversation patterns
  • Group chat support
  • Web dashboard
  • Voice message transcription support
  • Multi-language support
  • Sentiment analysis for better tone matching

⚠️ Privacy & Ethics

Important: This tool sends messages on your behalf automatically. Use responsibly.

Guidelines

  • βœ… Only add contacts who know they're texting an AI or won't mind
  • βœ… Be transparent about AI usage when appropriate
  • βœ… Review responses regularly via /autorespond_history
  • ❌ Don't use for deceptive purposes
  • ❌ Don't impersonate someone without their knowledge
  • βœ… Respect the boundaries of others
  • βœ… Disable auto-responses for sensitive conversations

🀝 Contributing

Found a bug? Have a feature idea?


πŸ“„ License

MIT License - see Clawdbot repository for full license text.


πŸ™ Credits

Built with ❀️ by the Clawdbot community.

Powered by:


<p align="center"> <strong>Made with πŸ€– + β˜• by the Clawdbot community</strong> </p>

Permissions & Security

Security level L1: Low-risk skills with minimal permissions. Review inputs and outputs before running in production.

Requirements

Before using this skill, ensure you have: - [ ] **macOS** with Messages.app signed in to iMessage - [ ] **imsg CLI** installed: `brew install steipete/tap/imsg` - [ ] **OpenAI API key** configured in Clawdbot config - [ ] **Full Disk Access** granted to Terminal/iTerm - [ ] **Messages automation permission** (macOS will prompt on first use)

Configuration

Config file: `~/clawd/imsg-autoresponder.json` ```json { "enabled": true, "defaultMinMinutesBetweenReplies": 15, "watchList": [ { "identifier": "+15551234567", "name": "Best Friend", "prompt": "Reply with a middle finger emoji", "minMinutesBetweenReplies": 10, "enabled": true } ] } ```

FAQ

How do I install imsg-autoresponder?

Run openclaw add @koba42corp/i-responder in your terminal. This installs imsg-autoresponder into your OpenClaw Skills catalog.

Does this skill run locally or in the cloud?

OpenClaw Skills execute locally by default. Review the SKILL.md and permissions before running any skill.

Where can I verify the source code?

The source repository is available at https://github.com/openclaw/skills/tree/main/skills/koba42corp/i-responder. Review commits and README documentation before installing.