{
  "schemaVersion": "1.0",
  "item": {
    "slug": "autoresponder",
    "name": "iResponder",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/Koba42Corp/autoresponder",
    "canonicalUrl": "https://clawhub.ai/Koba42Corp/autoresponder",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/autoresponder",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=autoresponder",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "scripts/launcher.sh",
      "scripts/manage.js",
      "scripts/watcher.js",
      "scripts/watcher-old.js"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/autoresponder"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/autoresponder",
    "agentPageUrl": "https://openagent3.xyz/skills/autoresponder/agent",
    "manifestUrl": "https://openagent3.xyz/skills/autoresponder/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/autoresponder/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "iMessage Auto-Responder",
        "body": "Automatically respond to iMessages/SMS from specific contacts using AI-generated replies that match your voice and conversation context."
      },
      {
        "title": "⚠️ Requirements Checklist",
        "body": "Before using this skill, ensure you have:\n\nmacOS with Messages.app signed in to iMessage\n imsg CLI installed: brew install steipete/tap/imsg\n OpenAI API key configured in Clawdbot config\n Full Disk Access granted to Terminal/iTerm\n Messages automation permission (macOS will prompt on first use)"
      },
      {
        "title": "Features",
        "body": "🤖 AI-powered responses using OpenAI GPT-4\n📱 Contact-based prompts - different AI personality per contact\n⏱️ Rate limiting - configurable delays between auto-responses\n💬 Context-aware - AI sees recent conversation history\n📊 Telegram management - slash commands + natural language\n🔄 Background monitoring - continuous polling for new messages\n🔧 Auto-cleanup - clears stale locks on restart (prevents stuck contacts)\n🧪 Test mode - generate real AI responses without sending\n⏰ Time windows - only respond during specific hours (e.g., 9 AM - 10 PM)\n🔑 Keyword triggers - only respond if message contains specific keywords (e.g., \"urgent\", \"help\")\n📊 Statistics tracking - track total responses, daily counts, and averages per contact\n🚦 Daily cap - limit max replies per day per contact (safety feature)"
      },
      {
        "title": "1. Add contacts to watch list",
        "body": "cd ~/clawd/imsg-autoresponder/scripts\nnode manage.js add \"+15551234567\" \"Reply with a middle finger emoji\" \"Best Friend\"\nnode 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\""
      },
      {
        "title": "2. Start the watcher",
        "body": "node watcher.js\n\nThe watcher runs in the foreground and logs to ~/clawd/logs/imsg-autoresponder.log."
      },
      {
        "title": "3. Run in background (recommended)",
        "body": "# Start in background\nnohup node ~/clawd/imsg-autoresponder/scripts/watcher.js > /dev/null 2>&1 &\n\n# Or use screen/tmux\nscreen -S imsg-watcher\nnode ~/clawd/imsg-autoresponder/scripts/watcher.js\n# Ctrl+A, D to detach"
      },
      {
        "title": "Configuration",
        "body": "Config file: ~/clawd/imsg-autoresponder.json\n\n{\n  \"enabled\": true,\n  \"defaultMinMinutesBetweenReplies\": 15,\n  \"watchList\": [\n    {\n      \"identifier\": \"+15551234567\",\n      \"name\": \"Best Friend\",\n      \"prompt\": \"Reply with a middle finger emoji\",\n      \"minMinutesBetweenReplies\": 10,\n      \"enabled\": true\n    }\n  ]\n}"
      },
      {
        "title": "Management via Telegram (Recommended)",
        "body": "The auto-responder can be managed directly through Telegram using slash commands or natural language."
      },
      {
        "title": "Slash Commands",
        "body": "Both space and underscore formats are supported:\n\n/autorespond list              OR  /autorespond_list\n/autorespond status            OR  /autorespond_status\n/autorespond add               OR  /autorespond_add <number> <name> <prompt>\n/autorespond remove            OR  /autorespond_remove <number>\n/autorespond edit              OR  /autorespond_edit <number> <prompt>\n/autorespond delay             OR  /autorespond_delay <number> <minutes>\n/autorespond history           OR  /autorespond_history <number>\n/autorespond test              OR  /autorespond_test <number> <message>\n/autorespond toggle            OR  /autorespond_toggle\n/autorespond restart           OR  /autorespond_restart\n\nBulk Operations:\n/autorespond set-all-delays    OR  /autorespond_set_all_delays <minutes>\n/autorespond enable-all        OR  /autorespond_enable_all\n/autorespond disable-all       OR  /autorespond_disable_all\n\nTime Windows:\n/autorespond set-time-window   OR  /autorespond_set_time_window <number> <start> <end>\n/autorespond clear-time-windows OR  /autorespond_clear_time_windows <number>\n\nKeyword Triggers:\n/autorespond add-keyword       OR  /autorespond_add_keyword <number> <keyword>\n/autorespond remove-keyword    OR  /autorespond_remove_keyword <number> <keyword>\n/autorespond clear-keywords    OR  /autorespond_clear_keywords <number>\n\nStatistics & Limits:\n/autorespond stats             OR  /autorespond_stats [<number>]\n/autorespond set-daily-cap     OR  /autorespond_set_daily_cap <number> <max>\n\nExamples:\n\n/autorespond_list\n/autorespond_status\n/autorespond_edit +15551234567 Be more sarcastic\n/autorespond_delay +15551234567 30\n/autorespond_history +15551234567\n/autorespond_set_time_window +15551234567 09:00 22:00\n/autorespond_clear_time_windows +15551234567\n/autorespond_add_keyword +15551234567 urgent\n/autorespond_add_keyword +15551234567 help\n/autorespond_clear_keywords +15551234567\n/autorespond_stats\n/autorespond_stats +15551234567\n/autorespond_set_daily_cap +15551234567 10\n/autorespond_set_all_delays 30\n/autorespond_disable_all\n/autorespond_restart"
      },
      {
        "title": "Natural Language",
        "body": "You can also just ask naturally:\n\n\"Show me the auto-responder status\"\n\"Add +15551234567 to the watch list with prompt: be sarcastic\"\n\"Change Scott's prompt to be nicer\"\n\"Disable auto-replies for Mom\"\n\"What has the auto-responder sent to Foxy recently?\"\n\"Restart the auto-responder\"\n\nThe agent will understand and execute the command using the telegram-handler.js script."
      },
      {
        "title": "Command-Line Management (Advanced)",
        "body": "cd ~/clawd/imsg-autoresponder/scripts\n\n# List all contacts\nnode manage.js list\n\n# Add contact\nnode manage.js add \"+15551234567\" \"Your custom prompt here\" \"Optional Name\"\n\n# Remove contact\nnode manage.js remove \"+15551234567\"\n\n# Enable/disable contact\nnode manage.js enable \"+15551234567\"\nnode manage.js disable \"+15551234567\"\n\n# Set custom delay for contact (in minutes)\nnode manage.js set-delay \"+15551234567\" 30\n\n# Toggle entire system on/off\nnode manage.js toggle"
      },
      {
        "title": "How It Works",
        "body": "Watcher monitors all incoming messages via imsg watch\nChecks watch list to see if sender is configured for auto-response\nRate limiting ensures we don't spam (configurable minutes between replies)\nFetches message history for the conversation (last 20 messages)\nGenerates AI response using Clawdbot + the contact's configured prompt\nSends reply via imsg send\nLogs everything to ~/clawd/logs/imsg-autoresponder.log"
      },
      {
        "title": "State Tracking",
        "body": "Response times are tracked in ~/clawd/data/imsg-autoresponder-state.json:\n\n{\n  \"lastResponses\": {\n    \"+15551234567\": 1706453280000\n  }\n}\n\nThis ensures rate limiting works correctly across restarts."
      },
      {
        "title": "Prompts",
        "body": "Prompts define how the AI should respond to each contact. Be specific!\n\nExamples:\n\n\"Reply with a middle finger emoji\"\n\n\"You are my helpful assistant. Reply warmly and briefly, as if I'm responding myself. Keep it under 160 characters.\"\n\n\"You are my sarcastic friend. Reply with witty, slightly snarky responses. Keep it short.\"\n\n\"Politely decline any requests and say I'm busy. Be brief but friendly.\"\n\nThe AI will see:\n\nThe contact's custom prompt\nRecent message history (last 5 messages)\nThe latest incoming message"
      },
      {
        "title": "Requirements",
        "body": "macOS with Messages.app signed in\nimsg CLI installed (brew install steipete/tap/imsg)\nFull Disk Access for Terminal\nClawdbot installed and configured\nAnthropic API key (configured in ~/.clawdbot/clawdbot.json or ANTHROPIC_API_KEY env var)\ncurl (pre-installed on macOS)"
      },
      {
        "title": "Safety",
        "body": "Rate limiting prevents spam (default: 15 minutes between replies per contact)\nManual override via enabled: false in config or node manage.js disable <number>\nSystem toggle to disable all auto-responses: node manage.js toggle\nLogs track all activity for review"
      },
      {
        "title": "Troubleshooting",
        "body": "Watcher not responding:\n\nCheck ~/clawd/logs/imsg-autoresponder.log for errors\nVerify imsg watch works manually: imsg watch --json\nEnsure contact is in watch list: node manage.js list\n\nRate limited too aggressively:\n\nAdjust delay: node manage.js set-delay \"+15551234567\" 5\nOr edit defaultMinMinutesBetweenReplies in config\n\nAI responses are off:\n\nRefine the prompt for that contact\nCheck message history is being captured correctly (see logs)"
      },
      {
        "title": "Agent Command Handling",
        "body": "When the user uses slash commands or natural language about the auto-responder, use the telegram-handler.js script."
      },
      {
        "title": "Command Mapping (Both Formats Supported)",
        "body": "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>\n\nProcessing steps:\n\nDetect /autorespond or /autorespond_ prefix\nExtract subcommand (normalize underscores to spaces)\nParse remaining arguments\nCall telegram-handler.js with appropriate parameters"
      },
      {
        "title": "Natural Language Pattern Matching",
        "body": "\"show/list/view auto-responder\" → node telegram-handler.js list\n\"add [contact] to auto-responder\" → node telegram-handler.js add <number> <name> <prompt>\n\"change/edit/update [contact]'s prompt\" → node telegram-handler.js edit <number> <prompt>\n\"set delay for [contact]\" → node telegram-handler.js delay <number> <minutes>\n\"disable/remove [contact] from auto-responder\" → node telegram-handler.js remove <number>\n\"auto-responder status\" → node telegram-handler.js status\n\"what has auto-responder sent to [contact]\" → node telegram-handler.js history <number>\n\"restart auto-responder\" → node telegram-handler.js restart\n\"enable/disable auto-responder\" → node telegram-handler.js toggle\n\nContact resolution:\n\nWhen user refers to contact names, look up their phone number from the config\nAlways use the full E.164 format (e.g., +15551234567)\n\nAfter config changes:\nAlways remind the user to restart the watcher if the command output mentions it."
      },
      {
        "title": "Watcher Not Responding",
        "body": "Check status:\n\n/autorespond_status\n\nView logs:\n\ntail -f ~/clawd/logs/imsg-autoresponder.log\n\nRestart:\n\n/autorespond_restart"
      },
      {
        "title": "Common Issues",
        "body": "\"OPENAI_API_KEY not found\"\n\nAdd API key to ~/.clawdbot/clawdbot.json:\n{\n  \"skills\": {\n    \"openai-whisper-api\": {\n      \"apiKey\": \"sk-proj-YOUR_KEY_HERE\"\n    }\n  }\n}\n\n\nRestart watcher after adding key\n\nPermission errors\n\nGrant Full Disk Access to Terminal in System Settings\nRestart Terminal after granting access\nVerify imsg chats --json works manually\n\nMessages not detected\n\nCheck Messages.app is signed in\nVerify contact is in watch list: /autorespond_list\nEnsure watcher is running: /autorespond_status\n\nDuplicate responses\n\nFixed in current version via processing locks\nRestart watcher to apply fix: /autorespond_restart"
      },
      {
        "title": "Testing",
        "body": "Generate actual AI responses without sending (preview mode):\n\n/autorespond_test +15551234567 Hey what's up?\n\nThis will:\n\nUse the contact's actual prompt\nGenerate a real AI response via OpenAI\nShow exactly what would be sent\nNOT actually send the message\n\nPerfect for testing new prompts before going live!"
      },
      {
        "title": "Privacy & Safety",
        "body": "⚠️ Important: This tool sends messages on your behalf automatically.\n\nOnly add contacts who know they're texting an AI or won't mind\nReview responses regularly via /autorespond_history\nUse rate limiting to avoid spam\nBe transparent when appropriate\nDisable instantly if needed: /autorespond_toggle"
      },
      {
        "title": "Future Enhancements",
        "body": "Smart rate limiting based on conversation patterns\nGroup chat support\nWeb dashboard\nVoice message transcription"
      }
    ],
    "body": "iMessage Auto-Responder\n\nAutomatically respond to iMessages/SMS from specific contacts using AI-generated replies that match your voice and conversation context.\n\n⚠️ Requirements Checklist\n\nBefore using this skill, ensure you have:\n\n macOS with Messages.app signed in to iMessage\n imsg CLI installed: brew install steipete/tap/imsg\n OpenAI API key configured in Clawdbot config\n Full Disk Access granted to Terminal/iTerm\n Messages automation permission (macOS will prompt on first use)\nFeatures\n🤖 AI-powered responses using OpenAI GPT-4\n📱 Contact-based prompts - different AI personality per contact\n⏱️ Rate limiting - configurable delays between auto-responses\n💬 Context-aware - AI sees recent conversation history\n📊 Telegram management - slash commands + natural language\n🔄 Background monitoring - continuous polling for new messages\n🔧 Auto-cleanup - clears stale locks on restart (prevents stuck contacts)\n🧪 Test mode - generate real AI responses without sending\n⏰ Time windows - only respond during specific hours (e.g., 9 AM - 10 PM)\n🔑 Keyword triggers - only respond if message contains specific keywords (e.g., \"urgent\", \"help\")\n📊 Statistics tracking - track total responses, daily counts, and averages per contact\n🚦 Daily cap - limit max replies per day per contact (safety feature)\nQuick Start\n1. Add contacts to watch list\ncd ~/clawd/imsg-autoresponder/scripts\nnode manage.js add \"+15551234567\" \"Reply with a middle finger emoji\" \"Best Friend\"\nnode 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\"\n\n2. Start the watcher\nnode watcher.js\n\n\nThe watcher runs in the foreground and logs to ~/clawd/logs/imsg-autoresponder.log.\n\n3. Run in background (recommended)\n# Start in background\nnohup node ~/clawd/imsg-autoresponder/scripts/watcher.js > /dev/null 2>&1 &\n\n# Or use screen/tmux\nscreen -S imsg-watcher\nnode ~/clawd/imsg-autoresponder/scripts/watcher.js\n# Ctrl+A, D to detach\n\nConfiguration\n\nConfig file: ~/clawd/imsg-autoresponder.json\n\n{\n  \"enabled\": true,\n  \"defaultMinMinutesBetweenReplies\": 15,\n  \"watchList\": [\n    {\n      \"identifier\": \"+15551234567\",\n      \"name\": \"Best Friend\",\n      \"prompt\": \"Reply with a middle finger emoji\",\n      \"minMinutesBetweenReplies\": 10,\n      \"enabled\": true\n    }\n  ]\n}\n\nManagement via Telegram (Recommended)\n\nThe auto-responder can be managed directly through Telegram using slash commands or natural language.\n\nSlash Commands\n\nBoth space and underscore formats are supported:\n\n/autorespond list              OR  /autorespond_list\n/autorespond status            OR  /autorespond_status\n/autorespond add               OR  /autorespond_add <number> <name> <prompt>\n/autorespond remove            OR  /autorespond_remove <number>\n/autorespond edit              OR  /autorespond_edit <number> <prompt>\n/autorespond delay             OR  /autorespond_delay <number> <minutes>\n/autorespond history           OR  /autorespond_history <number>\n/autorespond test              OR  /autorespond_test <number> <message>\n/autorespond toggle            OR  /autorespond_toggle\n/autorespond restart           OR  /autorespond_restart\n\nBulk Operations:\n/autorespond set-all-delays    OR  /autorespond_set_all_delays <minutes>\n/autorespond enable-all        OR  /autorespond_enable_all\n/autorespond disable-all       OR  /autorespond_disable_all\n\nTime Windows:\n/autorespond set-time-window   OR  /autorespond_set_time_window <number> <start> <end>\n/autorespond clear-time-windows OR  /autorespond_clear_time_windows <number>\n\nKeyword Triggers:\n/autorespond add-keyword       OR  /autorespond_add_keyword <number> <keyword>\n/autorespond remove-keyword    OR  /autorespond_remove_keyword <number> <keyword>\n/autorespond clear-keywords    OR  /autorespond_clear_keywords <number>\n\nStatistics & Limits:\n/autorespond stats             OR  /autorespond_stats [<number>]\n/autorespond set-daily-cap     OR  /autorespond_set_daily_cap <number> <max>\n\n\nExamples:\n\n/autorespond_list\n/autorespond_status\n/autorespond_edit +15551234567 Be more sarcastic\n/autorespond_delay +15551234567 30\n/autorespond_history +15551234567\n/autorespond_set_time_window +15551234567 09:00 22:00\n/autorespond_clear_time_windows +15551234567\n/autorespond_add_keyword +15551234567 urgent\n/autorespond_add_keyword +15551234567 help\n/autorespond_clear_keywords +15551234567\n/autorespond_stats\n/autorespond_stats +15551234567\n/autorespond_set_daily_cap +15551234567 10\n/autorespond_set_all_delays 30\n/autorespond_disable_all\n/autorespond_restart\n\nNatural Language\n\nYou can also just ask naturally:\n\n\"Show me the auto-responder status\"\n\"Add +15551234567 to the watch list with prompt: be sarcastic\"\n\"Change Scott's prompt to be nicer\"\n\"Disable auto-replies for Mom\"\n\"What has the auto-responder sent to Foxy recently?\"\n\"Restart the auto-responder\"\n\nThe agent will understand and execute the command using the telegram-handler.js script.\n\nCommand-Line Management (Advanced)\ncd ~/clawd/imsg-autoresponder/scripts\n\n# List all contacts\nnode manage.js list\n\n# Add contact\nnode manage.js add \"+15551234567\" \"Your custom prompt here\" \"Optional Name\"\n\n# Remove contact\nnode manage.js remove \"+15551234567\"\n\n# Enable/disable contact\nnode manage.js enable \"+15551234567\"\nnode manage.js disable \"+15551234567\"\n\n# Set custom delay for contact (in minutes)\nnode manage.js set-delay \"+15551234567\" 30\n\n# Toggle entire system on/off\nnode manage.js toggle\n\nHow It Works\nWatcher monitors all incoming messages via imsg watch\nChecks watch list to see if sender is configured for auto-response\nRate limiting ensures we don't spam (configurable minutes between replies)\nFetches message history for the conversation (last 20 messages)\nGenerates AI response using Clawdbot + the contact's configured prompt\nSends reply via imsg send\nLogs everything to ~/clawd/logs/imsg-autoresponder.log\nState Tracking\n\nResponse times are tracked in ~/clawd/data/imsg-autoresponder-state.json:\n\n{\n  \"lastResponses\": {\n    \"+15551234567\": 1706453280000\n  }\n}\n\n\nThis ensures rate limiting works correctly across restarts.\n\nPrompts\n\nPrompts define how the AI should respond to each contact. Be specific!\n\nExamples:\n\n\"Reply with a middle finger emoji\"\n\n\"You are my helpful assistant. Reply warmly and briefly, as if I'm responding myself. Keep it under 160 characters.\"\n\n\"You are my sarcastic friend. Reply with witty, slightly snarky responses. Keep it short.\"\n\n\"Politely decline any requests and say I'm busy. Be brief but friendly.\"\n\n\nThe AI will see:\n\nThe contact's custom prompt\nRecent message history (last 5 messages)\nThe latest incoming message\nRequirements\nmacOS with Messages.app signed in\nimsg CLI installed (brew install steipete/tap/imsg)\nFull Disk Access for Terminal\nClawdbot installed and configured\nAnthropic API key (configured in ~/.clawdbot/clawdbot.json or ANTHROPIC_API_KEY env var)\ncurl (pre-installed on macOS)\nSafety\nRate limiting prevents spam (default: 15 minutes between replies per contact)\nManual override via enabled: false in config or node manage.js disable <number>\nSystem toggle to disable all auto-responses: node manage.js toggle\nLogs track all activity for review\nTroubleshooting\n\nWatcher not responding:\n\nCheck ~/clawd/logs/imsg-autoresponder.log for errors\nVerify imsg watch works manually: imsg watch --json\nEnsure contact is in watch list: node manage.js list\n\nRate limited too aggressively:\n\nAdjust delay: node manage.js set-delay \"+15551234567\" 5\nOr edit defaultMinMinutesBetweenReplies in config\n\nAI responses are off:\n\nRefine the prompt for that contact\nCheck message history is being captured correctly (see logs)\nAgent Command Handling\n\nWhen the user uses slash commands or natural language about the auto-responder, use the telegram-handler.js script.\n\nCommand Mapping (Both Formats Supported)\nUser Input\tNormalize To\tHandler Call\n/autorespond list or /autorespond_list\tlist\tnode telegram-handler.js list\n/autorespond status or /autorespond_status\tstatus\tnode telegram-handler.js status\n/autorespond add or /autorespond_add <args>\tadd\tnode telegram-handler.js add <number> <name> <prompt>\n/autorespond remove or /autorespond_remove <num>\tremove\tnode telegram-handler.js remove <number>\n/autorespond edit or /autorespond_edit <args>\tedit\tnode telegram-handler.js edit <number> <prompt>\n/autorespond delay or /autorespond_delay <args>\tdelay\tnode telegram-handler.js delay <number> <minutes>\n/autorespond history or /autorespond_history <num>\thistory\tnode telegram-handler.js history <number> [limit]\n/autorespond test or /autorespond_test <num> <msg>\ttest\tnode telegram-handler.js test <number> <message>\n/autorespond toggle or /autorespond_toggle\ttoggle\tnode telegram-handler.js toggle\n/autorespond restart or /autorespond_restart\trestart\tnode telegram-handler.js restart\n/autorespond set-all-delays or /autorespond_set_all_delays <min>\tset-all-delays\tnode telegram-handler.js set-all-delays <minutes>\n/autorespond enable-all or /autorespond_enable_all\tenable-all\tnode telegram-handler.js enable-all\n/autorespond disable-all or /autorespond_disable_all\tdisable-all\tnode telegram-handler.js disable-all\n/autorespond set-time-window or /autorespond_set_time_window <num> <s> <e>\tset-time-window\tnode telegram-handler.js set-time-window <number> <start> <end>\n/autorespond clear-time-windows or /autorespond_clear_time_windows <num>\tclear-time-windows\tnode telegram-handler.js clear-time-windows <number>\n/autorespond add-keyword or /autorespond_add_keyword <num> <word>\tadd-keyword\tnode telegram-handler.js add-keyword <number> <keyword>\n/autorespond remove-keyword or /autorespond_remove_keyword <num> <word>\tremove-keyword\tnode telegram-handler.js remove-keyword <number> <keyword>\n/autorespond clear-keywords or /autorespond_clear_keywords <num>\tclear-keywords\tnode telegram-handler.js clear-keywords <number>\n/autorespond stats or /autorespond_stats [<num>]\tstats\tnode telegram-handler.js stats [<number>]\n/autorespond set-daily-cap or /autorespond_set_daily_cap <num> <max>\tset-daily-cap\tnode telegram-handler.js set-daily-cap <number> <max>\n\nProcessing steps:\n\nDetect /autorespond or /autorespond_ prefix\nExtract subcommand (normalize underscores to spaces)\nParse remaining arguments\nCall telegram-handler.js with appropriate parameters\nNatural Language Pattern Matching\n\"show/list/view auto-responder\" → node telegram-handler.js list\n\"add [contact] to auto-responder\" → node telegram-handler.js add <number> <name> <prompt>\n\"change/edit/update [contact]'s prompt\" → node telegram-handler.js edit <number> <prompt>\n\"set delay for [contact]\" → node telegram-handler.js delay <number> <minutes>\n\"disable/remove [contact] from auto-responder\" → node telegram-handler.js remove <number>\n\"auto-responder status\" → node telegram-handler.js status\n\"what has auto-responder sent to [contact]\" → node telegram-handler.js history <number>\n\"restart auto-responder\" → node telegram-handler.js restart\n\"enable/disable auto-responder\" → node telegram-handler.js toggle\n\nContact resolution:\n\nWhen user refers to contact names, look up their phone number from the config\nAlways use the full E.164 format (e.g., +15551234567)\n\nAfter config changes: Always remind the user to restart the watcher if the command output mentions it.\n\nTroubleshooting\nWatcher Not Responding\n\nCheck status:\n\n/autorespond_status\n\n\nView logs:\n\ntail -f ~/clawd/logs/imsg-autoresponder.log\n\n\nRestart:\n\n/autorespond_restart\n\nCommon Issues\n\n\"OPENAI_API_KEY not found\"\n\nAdd API key to ~/.clawdbot/clawdbot.json:\n{\n  \"skills\": {\n    \"openai-whisper-api\": {\n      \"apiKey\": \"sk-proj-YOUR_KEY_HERE\"\n    }\n  }\n}\n\nRestart watcher after adding key\n\nPermission errors\n\nGrant Full Disk Access to Terminal in System Settings\nRestart Terminal after granting access\nVerify imsg chats --json works manually\n\nMessages not detected\n\nCheck Messages.app is signed in\nVerify contact is in watch list: /autorespond_list\nEnsure watcher is running: /autorespond_status\n\nDuplicate responses\n\nFixed in current version via processing locks\nRestart watcher to apply fix: /autorespond_restart\nTesting\n\nGenerate actual AI responses without sending (preview mode):\n\n/autorespond_test +15551234567 Hey what's up?\n\n\nThis will:\n\nUse the contact's actual prompt\nGenerate a real AI response via OpenAI\nShow exactly what would be sent\nNOT actually send the message\n\nPerfect for testing new prompts before going live!\n\nPrivacy & Safety\n\n⚠️ Important: This tool sends messages on your behalf automatically.\n\nOnly add contacts who know they're texting an AI or won't mind\nReview responses regularly via /autorespond_history\nUse rate limiting to avoid spam\nBe transparent when appropriate\nDisable instantly if needed: /autorespond_toggle\nFuture Enhancements\nSmart rate limiting based on conversation patterns\nGroup chat support\nWeb dashboard\nVoice message transcription"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Koba42Corp/autoresponder",
    "publisherUrl": "https://clawhub.ai/Koba42Corp/autoresponder",
    "owner": "Koba42Corp",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/autoresponder",
    "downloadUrl": "https://openagent3.xyz/downloads/autoresponder",
    "agentUrl": "https://openagent3.xyz/skills/autoresponder/agent",
    "manifestUrl": "https://openagent3.xyz/skills/autoresponder/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/autoresponder/agent.md"
  }
}