[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MX8J2ETSCASNNZWZ7JXRF2":3,"skill-same:01M6MX8J2ETSCASNNZWZ7JXRF2":101},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M6MX8J2ETSCASNNZWZ7JXRF2","imsg-autoresponder",null,"Monitor iMessage\u002FSMS 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\u002Fhistory.","Kernel8901\u002Fai-agent-skills-classification","Kernel8901","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F72647553?v=4","01M6KV388J2H5PNC8D8P940BJD","01M6KV38CS5B3AY63RKZB410YM",7,"MIT","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F人工智能与大型语言模型\u002Fautoresponder\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"imsg","imsg autoresponder","autoresponder","rate","imessage","conversations","contacts","you","respond","sms","conversation","manage","auto","generated","view","context","history","Responder","monitor","status","2026-11-10 10:12:30",false,"---\nname: imsg-autoresponder\ndescription: Monitor iMessage\u002FSMS 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\u002Fhistory.\n---\n\n# iMessage Auto-Responder\n\nAutomatically respond to iMessages\u002FSMS 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\u002Ftap\u002Fimsg`\n- [ ] **OpenAI API key** configured in Clawdbot config\n- [ ] **Full Disk Access** granted to Terminal\u002FiTerm\n- [ ] **Messages automation permission** (macOS will prompt on first use)\n\n## Features\n\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)\n\n## Quick Start\n\n### 1. Add contacts to watch list\n\n```bash\ncd ~\u002Fclawd\u002Fimsg-autoresponder\u002Fscripts\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```\n\n### 2. Start the watcher\n\n```bash\nnode watcher.js\n```\n\nThe watcher runs in the foreground and logs to `~\u002Fclawd\u002Flogs\u002Fimsg-autoresponder.log`.\n\n### 3. Run in background (recommended)\n\n```bash\n# Start in background\nnohup node ~\u002Fclawd\u002Fimsg-autoresponder\u002Fscripts\u002Fwatcher.js > \u002Fdev\u002Fnull 2>&1 &\n\n# Or use screen\u002Ftmux\nscreen -S imsg-watcher\nnode ~\u002Fclawd\u002Fimsg-autoresponder\u002Fscripts\u002Fwatcher.js\n# Ctrl+A, D to detach\n```\n\n## Configuration\n\nConfig file: `~\u002Fclawd\u002Fimsg-autoresponder.json`\n\n```json\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```\n\n## Management via Telegram (Recommended)\n\nThe auto-responder can be managed directly through Telegram using **slash commands** or **natural language**.\n\n### Slash Commands\n\nBoth space and underscore formats are supported:\n\n```\n\u002Fautorespond list              OR  \u002Fautorespond_list\n\u002Fautorespond status            OR  \u002Fautorespond_status\n\u002Fautorespond add               OR  \u002Fautorespond_add \u003Cnumber> \u003Cname> \u003Cprompt>\n\u002Fautorespond remove            OR  \u002Fautorespond_remove \u003Cnumber>\n\u002Fautorespond edit              OR  \u002Fautorespond_edit \u003Cnumber> \u003Cprompt>\n\u002Fautorespond delay             OR  \u002Fautorespond_delay \u003Cnumber> \u003Cminutes>\n\u002Fautorespond history           OR  \u002Fautorespond_history \u003Cnumber>\n\u002Fautorespond test              OR  \u002Fautorespond_test \u003Cnumber> \u003Cmessage>\n\u002Fautorespond toggle            OR  \u002Fautorespond_toggle\n\u002Fautorespond restart           OR  \u002Fautorespond_restart\n\nBulk Operations:\n\u002Fautorespond set-all-delays    OR  \u002Fautorespond_set_all_delays \u003Cminutes>\n\u002Fautorespond enable-all        OR  \u002Fautorespond_enable_all\n\u002Fautorespond disable-all       OR  \u002Fautorespond_disable_all\n\nTime Windows:\n\u002Fautorespond set-time-window   OR  \u002Fautorespond_set_time_window \u003Cnumber> \u003Cstart> \u003Cend>\n\u002Fautorespond clear-time-windows OR  \u002Fautorespond_clear_time_windows \u003Cnumber>\n\nKeyword Triggers:\n\u002Fautorespond add-keyword       OR  \u002Fautorespond_add_keyword \u003Cnumber> \u003Ckeyword>\n\u002Fautorespond remove-keyword    OR  \u002Fautorespond_remove_keyword \u003Cnumber> \u003Ckeyword>\n\u002Fautorespond clear-keywords    OR  \u002Fautorespond_clear_keywords \u003Cnumber>\n\nStatistics & Limits:\n\u002Fautorespond stats             OR  \u002Fautorespond_stats [\u003Cnumber>]\n\u002Fautorespond set-daily-cap     OR  \u002Fautorespond_set_daily_cap \u003Cnumber> \u003Cmax>\n```\n\n**Examples:**\n```\n\u002Fautorespond_list\n\u002Fautorespond_status\n\u002Fautorespond_edit +15551234567 Be more sarcastic\n\u002Fautorespond_delay +15551234567 30\n\u002Fautorespond_history +15551234567\n\u002Fautorespond_set_time_window +15551234567 09:00 22:00\n\u002Fautorespond_clear_time_windows +15551234567\n\u002Fautorespond_add_keyword +15551234567 urgent\n\u002Fautorespond_add_keyword +15551234567 help\n\u002Fautorespond_clear_keywords +15551234567\n\u002Fautorespond_stats\n\u002Fautorespond_stats +15551234567\n\u002Fautorespond_set_daily_cap +15551234567 10\n\u002Fautorespond_set_all_delays 30\n\u002Fautorespond_disable_all\n\u002Fautorespond_restart\n```\n\n### Natural 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\n## Command-Line Management (Advanced)\n\n```bash\ncd ~\u002Fclawd\u002Fimsg-autoresponder\u002Fscripts\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\u002Fdisable 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\u002Foff\nnode manage.js toggle\n```\n\n## How It Works\n\n1. **Watcher** monitors all incoming messages via `imsg watch`\n2. **Checks watch list** to see if sender is configured for auto-response\n3. **Rate limiting** ensures we don't spam (configurable minutes between replies)\n4. **Fetches message history** for the conversation (last 20 messages)\n5. **Generates AI response** using Clawdbot + the contact's configured prompt\n6. **Sends reply** via `imsg send`\n7. **Logs everything** to `~\u002Fclawd\u002Flogs\u002Fimsg-autoresponder.log`\n\n## State Tracking\n\nResponse times are tracked in `~\u002Fclawd\u002Fdata\u002Fimsg-autoresponder-state.json`:\n\n```json\n{\n  \"lastResponses\": {\n    \"+15551234567\": 1706453280000\n  }\n}\n```\n\nThis ensures rate limiting works correctly across restarts.\n\n## Prompts\n\nPrompts define how the AI should respond to each contact. Be specific!\n\n**Examples:**\n\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- The contact's custom prompt\n- Recent message history (last 5 messages)\n- The latest incoming message\n\n## Requirements\n\n- macOS with Messages.app signed in\n- `imsg` CLI installed (`brew install steipete\u002Ftap\u002Fimsg`)\n- Full Disk Access for Terminal\n- Clawdbot installed and configured\n- Anthropic API key (configured in `~\u002F.clawdbot\u002Fclawdbot.json` or `ANTHROPIC_API_KEY` env var)\n- `curl` (pre-installed on macOS)\n\n## Safety\n\n- **Rate limiting** prevents spam (default: 15 minutes between replies per contact)\n- **Manual override** via `enabled: false` in config or `node manage.js disable \u003Cnumber>`\n- **System toggle** to disable all auto-responses: `node manage.js toggle`\n- **Logs** track all activity for review\n\n## Troubleshooting\n\n**Watcher not responding:**\n- Check `~\u002Fclawd\u002Flogs\u002Fimsg-autoresponder.log` for errors\n- Verify `imsg watch` works manually: `imsg watch --json`\n- Ensure contact is in watch list: `node manage.js list`\n\n**Rate limited too aggressively:**\n- Adjust delay: `node manage.js set-delay \"+15551234567\" 5`\n- Or edit `defaultMinMinutesBetweenReplies` in config\n\n**AI responses are off:**\n- Refine the prompt for that contact\n- Check message history is being captured correctly (see logs)\n\n## Agent Command Handling\n\nWhen the user uses slash commands or natural language about the auto-responder, use the `telegram-handler.js` script.\n\n### Command Mapping (Both Formats Supported)\n\n| User Input | Normalize To | Handler Call |\n|------------|--------------|--------------|\n| `\u002Fautorespond list` or `\u002Fautorespond_list` | list | `node telegram-handler.js list` |\n| `\u002Fautorespond status` or `\u002Fautorespond_status` | status | `node telegram-handler.js status` |\n| `\u002Fautorespond add` or `\u002Fautorespond_add \u003Cargs>` | add | `node telegram-handler.js add \u003Cnumber> \u003Cname> \u003Cprompt>` |\n| `\u002Fautorespond remove` or `\u002Fautorespond_remove \u003Cnum>` | remove | `node telegram-handler.js remove \u003Cnumber>` |\n| `\u002Fautorespond edit` or `\u002Fautorespond_edit \u003Cargs>` | edit | `node telegram-handler.js edit \u003Cnumber> \u003Cprompt>` |\n| `\u002Fautorespond delay` or `\u002Fautorespond_delay \u003Cargs>` | delay | `node telegram-handler.js delay \u003Cnumber> \u003Cminutes>` |\n| `\u002Fautorespond history` or `\u002Fautorespond_history \u003Cnum>` | history | `node telegram-handler.js history \u003Cnumber> [limit]` |\n| `\u002Fautorespond test` or `\u002Fautorespond_test \u003Cnum> \u003Cmsg>` | test | `node telegram-handler.js test \u003Cnumber> \u003Cmessage>` |\n| `\u002Fautorespond toggle` or `\u002Fautorespond_toggle` | toggle | `node telegram-handler.js toggle` |\n| `\u002Fautorespond restart` or `\u002Fautorespond_restart` | restart | `node telegram-handler.js restart` |\n| `\u002Fautorespond set-all-delays` or `\u002Fautorespond_set_all_delays \u003Cmin>` | set-all-delays | `node telegram-handler.js set-all-delays \u003Cminutes>` |\n| `\u002Fautorespond enable-all` or `\u002Fautorespond_enable_all` | enable-all | `node telegram-handler.js enable-all` |\n| `\u002Fautorespond disable-all` or `\u002Fautorespond_disable_all` | disable-all | `node telegram-handler.js disable-all` |\n| `\u002Fautorespond set-time-window` or `\u002Fautorespond_set_time_window \u003Cnum> \u003Cs> \u003Ce>` | set-time-window | `node telegram-handler.js set-time-window \u003Cnumber> \u003Cstart> \u003Cend>` |\n| `\u002Fautorespond clear-time-windows` or `\u002Fautorespond_clear_time_windows \u003Cnum>` | clear-time-windows | `node telegram-handler.js clear-time-windows \u003Cnumber>` |\n| `\u002Fautorespond add-keyword` or `\u002Fautorespond_add_keyword \u003Cnum> \u003Cword>` | add-keyword | `node telegram-handler.js add-keyword \u003Cnumber> \u003Ckeyword>` |\n| `\u002Fautorespond remove-keyword` or `\u002Fautorespond_remove_keyword \u003Cnum> \u003Cword>` | remove-keyword | `node telegram-handler.js remove-keyword \u003Cnumber> \u003Ckeyword>` |\n| `\u002Fautorespond clear-keywords` or `\u002Fautorespond_clear_keywords \u003Cnum>` | clear-keywords | `node telegram-handler.js clear-keywords \u003Cnumber>` |\n| `\u002Fautorespond stats` or `\u002Fautorespond_stats [\u003Cnum>]` | stats | `node telegram-handler.js stats [\u003Cnumber>]` |\n| `\u002Fautorespond set-daily-cap` or `\u002Fautorespond_set_daily_cap \u003Cnum> \u003Cmax>` | set-daily-cap | `node telegram-handler.js set-daily-cap \u003Cnumber> \u003Cmax>` |\n\n**Processing steps:**\n1. Detect `\u002Fautorespond` or `\u002Fautorespond_` prefix\n2. Extract subcommand (normalize underscores to spaces)\n3. Parse remaining arguments\n4. Call telegram-handler.js with appropriate parameters\n\n### Natural Language Pattern Matching\n\n- \"show\u002Flist\u002Fview auto-responder\" → `node telegram-handler.js list`\n- \"add [contact] to auto-responder\" → `node telegram-handler.js add \u003Cnumber> \u003Cname> \u003Cprompt>`\n- \"change\u002Fedit\u002Fupdate [contact]'s prompt\" → `node telegram-handler.js edit \u003Cnumber> \u003Cprompt>`\n- \"set delay for [contact]\" → `node telegram-handler.js delay \u003Cnumber> \u003Cminutes>`\n- \"disable\u002Fremove [contact] from auto-responder\" → `node telegram-handler.js remove \u003Cnumber>`\n- \"auto-responder status\" → `node telegram-handler.js status`\n- \"what has auto-responder sent to [contact]\" → `node telegram-handler.js history \u003Cnumber>`\n- \"restart auto-responder\" → `node telegram-handler.js restart`\n- \"enable\u002Fdisable auto-responder\" → `node telegram-handler.js toggle`\n\n**Contact resolution:**\n- When user refers to contact names, look up their phone number from the config\n- Always use the full E.164 format (e.g., `+15551234567`)\n\n**After config changes:**\nAlways remind the user to restart the watcher if the command output mentions it.\n\n## Troubleshooting\n\n### Watcher Not Responding\n\n**Check status:**\n```\n\u002Fautorespond_status\n```\n\n**View logs:**\n```bash\ntail -f ~\u002Fclawd\u002Flogs\u002Fimsg-autoresponder.log\n```\n\n**Restart:**\n```\n\u002Fautorespond_restart\n```\n\n### Common Issues\n\n**\"OPENAI_API_KEY not found\"**\n- Add API key to `~\u002F.clawdbot\u002Fclawdbot.json`:\n  ```json\n  {\n    \"skills\": {\n      \"openai-whisper-api\": {\n        \"apiKey\": \"sk-proj-YOUR_KEY_HERE\"\n      }\n    }\n  }\n  ```\n- Restart watcher after adding key\n\n**Permission errors**\n- Grant Full Disk Access to Terminal in System Settings\n- Restart Terminal after granting access\n- Verify `imsg chats --json` works manually\n\n**Messages not detected**\n- Check Messages.app is signed in\n- Verify contact is in watch list: `\u002Fautorespond_list`\n- Ensure watcher is running: `\u002Fautorespond_status`\n\n**Duplicate responses**\n- Fixed in current version via processing locks\n- Restart watcher to apply fix: `\u002Fautorespond_restart`\n\n### Testing\n\nGenerate actual AI responses without sending (preview mode):\n```\n\u002Fautorespond_test +15551234567 Hey what's up?\n```\n\nThis will:\n- Use the contact's actual prompt\n- Generate a real AI response via OpenAI\n- Show exactly what would be sent\n- **NOT actually send** the message\n\nPerfect for testing new prompts before going live!\n\n## Privacy & Safety\n\n⚠️ **Important:** This tool sends messages on your behalf automatically.\n\n- Only add contacts who know they're texting an AI or won't mind\n- Review responses regularly via `\u002Fautorespond_history`\n- Use rate limiting to avoid spam\n- Be transparent when appropriate\n- Disable instantly if needed: `\u002Fautorespond_toggle`\n\n## Future Enhancements\n\n- Smart rate limiting based on conversation patterns\n- Group chat support\n- Web dashboard\n- Voice message transcription\n","# iMessage Auto-Responder\n\nAutomatically respond to iMessages\u002FSMS 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\u002Ftap\u002Fimsg`\n- [ ] **OpenAI API key** configured in Clawdbot config\n- [ ] **Full Disk Access** granted to Terminal\u002FiTerm\n- [ ] **Messages automation permission** (macOS will prompt on first use)\n\n## Features\n\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)\n\n## Quick Start\n\n### 1. Add contacts to watch list\n\n```bash\ncd ~\u002Fclawd\u002Fimsg-autoresponder\u002Fscripts\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```\n\n### 2. Start the watcher\n\n```bash\nnode watcher.js\n```\n\nThe watcher runs in the foreground and logs to `~\u002Fclawd\u002Flogs\u002Fimsg-autoresponder.log`.\n\n### 3. Run in background (recommended)\n\n```bash\n# Start in background\nnohup node ~\u002Fclawd\u002Fimsg-autoresponder\u002Fscripts\u002Fwatcher.js > \u002Fdev\u002Fnull 2>&1 &\n\n# Or use screen\u002Ftmux\nscreen -S imsg-watcher\nnode ~\u002Fclawd\u002Fimsg-autoresponder\u002Fscripts\u002Fwatcher.js\n# Ctrl+A, D to detach\n```\n\n## Configuration\n\nConfig file: `~\u002Fclawd\u002Fimsg-autoresponder.json`\n\n```json\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```\n\n## Management via Telegram (Recommended)\n\nThe auto-responder can be managed directly through Telegram using **slash commands** or **natural language**.\n\n### Slash Commands\n\nBoth space and underscore formats are supported:\n\n```\n\u002Fautorespond list              OR  \u002Fautorespond_list\n\u002Fautorespond status            OR  \u002Fautorespond_status\n\u002Fautorespond add               OR  \u002Fautorespond_add \u003Cnumber> \u003Cname> \u003Cprompt>\n\u002Fautorespond remove            OR  \u002Fautorespond_remove \u003Cnumber>\n\u002Fautorespond edit              OR  \u002Fautorespond_edit \u003Cnumber> \u003Cprompt>\n\u002Fautorespond delay             OR  \u002Fautorespond_delay \u003Cnumber> \u003Cminutes>\n\u002Fautorespond history           OR  \u002Fautorespond_history \u003Cnumber>\n\u002Fautorespond test              OR  \u002Fautorespond_test \u003Cnumber> \u003Cmessage>\n\u002Fautorespond toggle            OR  \u002Fautorespond_toggle\n\u002Fautorespond restart           OR  \u002Fautorespond_restart\n\nBulk Operations:\n\u002Fautorespond set-all-delays    OR  \u002Fautorespond_set_all_delays \u003Cminutes>\n\u002Fautorespond enable-all        OR  \u002Fautorespond_enable_all\n\u002Fautorespond disable-all       OR  \u002Fautorespond_disable_all\n\nTime Windows:\n\u002Fautorespond set-time-window   OR  \u002Fautorespond_set_time_window \u003Cnumber> \u003Cstart> \u003Cend>\n\u002Fautorespond clear-time-windows OR  \u002Fautorespond_clear_time_windows \u003Cnumber>\n\nKeyword Triggers:\n\u002Fautorespond add-keyword       OR  \u002Fautorespond_add_keyword \u003Cnumber> \u003Ckeyword>\n\u002Fautorespond remove-keyword    OR  \u002Fautorespond_remove_keyword \u003Cnumber> \u003Ckeyword>\n\u002Fautorespond clear-keywords    OR  \u002Fautorespond_clear_keywords \u003Cnumber>\n\nStatistics & Limits:\n\u002Fautorespond stats             OR  \u002Fautorespond_stats [\u003Cnumber>]\n\u002Fautorespond set-daily-cap     OR  \u002Fautorespond_set_daily_cap \u003Cnumber> \u003Cmax>\n```\n\n**Examples:**\n```\n\u002Fautorespond_list\n\u002Fautorespond_status\n\u002Fautorespond_edit +15551234567 Be more sarcastic\n\u002Fautorespond_delay +15551234567 30\n\u002Fautorespond_history +15551234567\n\u002Fautorespond_set_time_window +15551234567 09:00 22:00\n\u002Fautorespond_clear_time_windows +15551234567\n\u002Fautorespond_add_keyword +15551234567 urgent\n\u002Fautorespond_add_keyword +15551234567 help\n\u002Fautorespond_clear_keywords +15551234567\n\u002Fautorespond_stats\n\u002Fautorespond_stats +15551234567\n\u002Fautorespond_set_daily_cap +15551234567 10\n\u002Fautorespond_set_all_delays 30\n\u002Fautorespond_disable_all\n\u002Fautorespond_restart\n```\n\n### Natural 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\n## Command-Line Management (Advanced)\n\n```bash\ncd ~\u002Fclawd\u002Fimsg-autoresponder\u002Fscripts\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\u002Fdisable 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\u002Foff\nnode manage.js toggle\n```\n\n## How It Works\n\n1. **Watcher** monitors all incoming messages via `imsg watch`\n2. **Checks watch list** to see if sender is configured for auto-response\n3. **Rate limiting** ensures we don't spam (configurable minutes between replies)\n4. **Fetches message history** for the conversation (last 20 messages)\n5. **Generates AI response** using Clawdbot + the contact's configured prompt\n6. **Sends reply** via `imsg send`\n7. **Logs everything** to `~\u002Fclawd\u002Flogs\u002Fimsg-autoresponder.log`\n\n## State Tracking\n\nResponse times are tracked in `~\u002Fclawd\u002Fdata\u002Fimsg-autoresponder-state.json`:\n\n```json\n{\n  \"lastResponses\": {\n    \"+15551234567\": 1706453280000\n  }\n}\n```\n\nThis ensures rate limiting works correctly across restarts.\n\n## Prompts\n\nPrompts define how the AI should respond to each contact. Be specific!\n\n**Examples:**\n\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- The contact's custom prompt\n- Recent message history (last 5 messages)\n- The latest incoming message\n\n## Requirements\n\n- macOS with Messages.app signed in\n- `imsg` CLI installed (`brew install steipete\u002Ftap\u002Fimsg`)\n- Full Disk Access for Terminal\n- Clawdbot installed and configured\n- Anthropic API key (configured in `~\u002F.clawdbot\u002Fclawdbot.json` or `ANTHROPIC_API_KEY` env var)\n- `curl` (pre-installed on macOS)\n\n## Safety\n\n- **Rate limiting** prevents spam (default: 15 minutes between replies per contact)\n- **Manual override** via `enabled: false` in config or `node manage.js disable \u003Cnumber>`\n- **System toggle** to disable all auto-responses: `node manage.js toggle`\n- **Logs** track all activity for review\n\n## Troubleshooting\n\n**Watcher not responding:**\n- Check `~\u002Fclawd\u002Flogs\u002Fimsg-autoresponder.log` for errors\n- Verify `imsg watch` works manually: `imsg watch --json`\n- Ensure contact is in watch list: `node manage.js list`\n\n**Rate limited too aggressively:**\n- Adjust delay: `node manage.js set-delay \"+15551234567\" 5`\n- Or edit `defaultMinMinutesBetweenReplies` in config\n\n**AI responses are off:**\n- Refine the prompt for that contact\n- Check message history is being captured correctly (see logs)\n\n## Agent Command Handling\n\nWhen the user uses slash commands or natural language about the auto-responder, use the `telegram-handler.js` script.\n\n### Command Mapping (Both Formats Supported)\n\n| User Input | Normalize To | Handler Call |\n|------------|--------------|--------------|\n| `\u002Fautorespond list` or `\u002Fautorespond_list` | list | `node telegram-handler.js list` |\n| `\u002Fautorespond status` or `\u002Fautorespond_status` | status | `node telegram-handler.js status` |\n| `\u002Fautorespond add` or `\u002Fautorespond_add \u003Cargs>` | add | `node telegram-handler.js add \u003Cnumber> \u003Cname> \u003Cprompt>` |\n| `\u002Fautorespond remove` or `\u002Fautorespond_remove \u003Cnum>` | remove | `node telegram-handler.js remove \u003Cnumber>` |\n| `\u002Fautorespond edit` or `\u002Fautorespond_edit \u003Cargs>` | edit | `node telegram-handler.js edit \u003Cnumber> \u003Cprompt>` |\n| `\u002Fautorespond delay` or `\u002Fautorespond_delay \u003Cargs>` | delay | `node telegram-handler.js delay \u003Cnumber> \u003Cminutes>` |\n| `\u002Fautorespond history` or `\u002Fautorespond_history \u003Cnum>` | history | `node telegram-handler.js history \u003Cnumber> [limit]` |\n| `\u002Fautorespond test` or `\u002Fautorespond_test \u003Cnum> \u003Cmsg>` | test | `node telegram-handler.js test \u003Cnumber> \u003Cmessage>` |\n| `\u002Fautorespond toggle` or `\u002Fautorespond_toggle` | toggle | `node telegram-handler.js toggle` |\n| `\u002Fautorespond restart` or `\u002Fautorespond_restart` | restart | `node telegram-handler.js restart` |\n| `\u002Fautorespond set-all-delays` or `\u002Fautorespond_set_all_delays \u003Cmin>` | set-all-delays | `node telegram-handler.js set-all-delays \u003Cminutes>` |\n| `\u002Fautorespond enable-all` or `\u002Fautorespond_enable_all` | enable-all | `node telegram-handler.js enable-all` |\n| `\u002Fautorespond disable-all` or `\u002Fautorespond_disable_all` | disable-all | `node telegram-handler.js disable-all` |\n| `\u002Fautorespond set-time-window` or `\u002Fautorespond_set_time_window \u003Cnum> \u003Cs> \u003Ce>` | set-time-window | `node telegram-handler.js set-time-window \u003Cnumber> \u003Cstart> \u003Cend>` |\n| `\u002Fautorespond clear-time-windows` or `\u002Fautorespond_clear_time_windows \u003Cnum>` | clear-time-windows | `node telegram-handler.js clear-time-windows \u003Cnumber>` |\n| `\u002Fautorespond add-keyword` or `\u002Fautorespond_add_keyword \u003Cnum> \u003Cword>` | add-keyword | `node telegram-handler.js add-keyword \u003Cnumber> \u003Ckeyword>` |\n| `\u002Fautorespond remove-keyword` or `\u002Fautorespond_remove_keyword \u003Cnum> \u003Cword>` | remove-keyword | `node telegram-handler.js remove-keyword \u003Cnumber> \u003Ckeyword>` |\n| `\u002Fautorespond clear-keywords` or `\u002Fautorespond_clear_keywords \u003Cnum>` | clear-keywords | `node telegram-handler.js clear-keywords \u003Cnumber>` |\n| `\u002Fautorespond stats` or `\u002Fautorespond_stats [\u003Cnum>]` | stats | `node telegram-handler.js stats [\u003Cnumber>]` |\n| `\u002Fautorespond set-daily-cap` or `\u002Fautorespond_set_daily_cap \u003Cnum> \u003Cmax>` | set-daily-cap | `node telegram-handler.js set-daily-cap \u003Cnumber> \u003Cmax>` |\n\n**Processing steps:**\n1. Detect `\u002Fautorespond` or `\u002Fautorespond_` prefix\n2. Extract subcommand (normalize underscores to spaces)\n3. Parse remaining arguments\n4. Call telegram-handler.js with appropriate parameters\n\n### Natural Language Pattern Matching\n\n- \"show\u002Flist\u002Fview auto-responder\" → `node telegram-handler.js list`\n- \"add [contact] to auto-responder\" → `node telegram-handler.js add \u003Cnumber> \u003Cname> \u003Cprompt>`\n- \"change\u002Fedit\u002Fupdate [contact]'s prompt\" → `node telegram-handler.js edit \u003Cnumber> \u003Cprompt>`\n- \"set delay for [contact]\" → `node telegram-handler.js delay \u003Cnumber> \u003Cminutes>`\n- \"disable\u002Fremove [contact] from auto-responder\" → `node telegram-handler.js remove \u003Cnumber>`\n- \"auto-responder status\" → `node telegram-handler.js status`\n- \"what has auto-responder sent to [contact]\" → `node telegram-handler.js history \u003Cnumber>`\n- \"restart auto-responder\" → `node telegram-handler.js restart`\n- \"enable\u002Fdisable auto-responder\" → `node telegram-handler.js toggle`\n\n**Contact resolution:**\n- When user refers to contact names, look up their phone number from the config\n- Always use the full E.164 format (e.g., `+15551234567`)\n\n**After config changes:**\nAlways remind the user to restart the watcher if the command output mentions it.\n\n## Troubleshooting\n\n### Watcher Not Responding\n\n**Check status:**\n```\n\u002Fautorespond_status\n```\n\n**View logs:**\n```bash\ntail -f ~\u002Fclawd\u002Flogs\u002Fimsg-autoresponder.log\n```\n\n**Restart:**\n```\n\u002Fautorespond_restart\n```\n\n### Common Issues\n\n**\"OPENAI_API_KEY not found\"**\n- Add API key to `~\u002F.clawdbot\u002Fclawdbot.json`:\n  ```json\n  {\n    \"skills\": {\n      \"openai-whisper-api\": {\n        \"apiKey\": \"sk-proj-YOUR_KEY_HERE\"\n      }\n    }\n  }\n  ```\n- Restart watcher after adding key\n\n**Permission errors**\n- Grant Full Disk Access to Terminal in System Settings\n- Restart Terminal after granting access\n- Verify `imsg chats --json` works manually\n\n**Messages not detected**\n- Check Messages.app is signed in\n- Verify contact is in watch list: `\u002Fautorespond_list`\n- Ensure watcher is running: `\u002Fautorespond_status`\n\n**Duplicate responses**\n- Fixed in current version via processing locks\n- Restart watcher to apply fix: `\u002Fautorespond_restart`\n\n### Testing\n\nGenerate actual AI responses without sending (preview mode):\n```\n\u002Fautorespond_test +15551234567 Hey what's up?\n```\n\nThis will:\n- Use the contact's actual prompt\n- Generate a real AI response via OpenAI\n- Show exactly what would be sent\n- **NOT actually send** the message\n\nPerfect for testing new prompts before going live!\n\n## Privacy & Safety\n\n⚠️ **Important:** This tool sends messages on your behalf automatically.\n\n- Only add contacts who know they're texting an AI or won't mind\n- Review responses regularly via `\u002Fautorespond_history`\n- Use rate limiting to avoid spam\n- Be transparent when appropriate\n- Disable instantly if needed: `\u002Fautorespond_toggle`\n\n## Future Enhancements\n\n- Smart rate limiting based on conversation patterns\n- Group chat support\n- Web dashboard\n- Voice message transcription\n",{"name":5,"description":7},"main","f4cb2d49f7667e79ef7804f50396d5aaffdf1f56","人工智能与大型语言模型\u002Fautoresponder",1,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification","https:\u002F\u002Fgithub.com\u002FKernel8901","a little little little dobe in life but science geek","2026-04-05 16:43:56",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add Kernel8901\u002Fai-agent-skills-classification --skill imsg-autoresponder",{"tool":57,"command":58},"bunx","bunx skills add Kernel8901\u002Fai-agent-skills-classification --skill imsg-autoresponder",{"tool":60,"command":61},"pnpm","pnpm dlx skills add Kernel8901\u002Fai-agent-skills-classification --skill imsg-autoresponder","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F人工智能与大型语言模型\u002Fautoresponder\u002FSKILL.md",true,[65,71,75,79,85,89,93,97],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"_meta.json","REFERENCE","参考文档",279,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F人工智能与大型语言模型\u002Fautoresponder\u002F_meta.json",{"path":72,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":73,"sourceHtmlUrl":74},"config\u002Fautoresponder.example.json",553,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F人工智能与大型语言模型\u002Fautoresponder\u002Fconfig\u002Fautoresponder.example.json",{"path":76,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":77,"sourceHtmlUrl":78},"README.md",13977,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F人工智能与大型语言模型\u002Fautoresponder\u002FREADME.md",{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"scripts\u002Flauncher.sh","SCRIPT","脚本",1859,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F人工智能与大型语言模型\u002Fautoresponder\u002Fscripts\u002Flauncher.sh",{"path":86,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":87,"sourceHtmlUrl":88},"scripts\u002Fmanage.js",13490,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F人工智能与大型语言模型\u002Fautoresponder\u002Fscripts\u002Fmanage.js",{"path":90,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":91,"sourceHtmlUrl":92},"scripts\u002Ftelegram-handler.js",20674,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F人工智能与大型语言模型\u002Fautoresponder\u002Fscripts\u002Ftelegram-handler.js",{"path":94,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":95,"sourceHtmlUrl":96},"scripts\u002Fwatcher-old.js",8734,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F人工智能与大型语言模型\u002Fautoresponder\u002Fscripts\u002Fwatcher-old.js",{"path":98,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":99,"sourceHtmlUrl":100},"scripts\u002Fwatcher.js",13966,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F人工智能与大型语言模型\u002Fautoresponder\u002Fscripts\u002Fwatcher.js",[102,126,162,173,183,213],{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":38},"01M6Q5R6WZ06RRB9RQTW54B34B","zyfai","Earn yield on any Ethereum wallet on Base, Arbitrum, and Plasma. Use when a user wants passive DeFi yield on their funds. Deploys a non-custodial subaccount (Safe) linked to their EOA, enables automated yield optimization, and lets them deposit\u002Fwithdraw anytime.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzyfai-sdk\u002FSKILL.md",[],[104,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125],"safe","ethereum","defi","Optimization","user","use","Wallet","base","deposit","withdraw","yield","arbitrum","non-custodial","passive","defi yield","earn","yield optimization",{"skillNo":127,"name":128,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":144,"publishedAt":38},"01M6Q5R337B5JSNER4P4YS03TN","zerion-api","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api\u002FSKILL.md",[131,136,139],{"categoryNo":132,"categoryName":133,"taxonomyType":134,"taxonomyTypeDesc":135},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":137,"categoryName":138,"taxonomyType":134,"taxonomyTypeDesc":135},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":140,"categoryName":141,"taxonomyType":142,"taxonomyTypeDesc":143},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[145,146,147,148,149,150,151,111,152,115,153,154,155,156,157,158,159,160,161],"api","zerion api","zerion","MCP","mcp server","server","blockchain","transactions","crypto wallet","crypto","evm","solana","query","across","positions","token","prices",{"skillNo":163,"name":164,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":170,"publishedAt":38},"01M6Q5QZFYTDAZMZ27BN5VZXAR","zerion-api-skill","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api-skill\u002FSKILL.md",[167,168,169],{"categoryNo":132,"categoryName":133,"taxonomyType":134,"taxonomyTypeDesc":135},{"categoryNo":137,"categoryName":138,"taxonomyType":134,"taxonomyTypeDesc":135},{"categoryNo":140,"categoryName":141,"taxonomyType":142,"taxonomyTypeDesc":143},[145,171,172,146,147,148,149,150,151,111,152,115,154,155,156,157,158,159,160,161],"api skill","zerion api skill",{"skillNo":174,"name":175,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":181,"publishedAt":38},"01M6Q5QW17QW98RA3FE45E4RD8","zerion-api-mcp","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api-mcp\u002FSKILL.md",[178,179,180],{"categoryNo":132,"categoryName":133,"taxonomyType":134,"taxonomyTypeDesc":135},{"categoryNo":137,"categoryName":138,"taxonomyType":134,"taxonomyTypeDesc":135},{"categoryNo":140,"categoryName":141,"taxonomyType":142,"taxonomyTypeDesc":143},[148,145,182,146,147,149,150,111,152,115,153,154,155,156,157,158,159,160,161],"zerion api mcp",{"skillNo":184,"name":185,"nameZh":6,"description":186,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":187,"categories":188,"keywords":192,"publishedAt":38},"01M6Q5QQYZB7A501BDEQWKGSJT","yahoo-finance-forex","Fetches real-time FOREX news and market data from Yahoo Finance for major currency pairs (EUR\u002FUSD, GBP\u002FUSD, USD\u002FJPY, etc.). Analyzes sentiment and provides trading context.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fyahoo-finance-forex\u002FSKILL.md",[189],{"categoryNo":190,"categoryName":191,"taxonomyType":142,"taxonomyTypeDesc":143},"01JBSEEDCAT000000000000040","财务",[193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212],"finance","yahoo finance","forex","yahoo","yahoo finance forex","github","https","sentiment","real-time","python3","install","Market","usd","news","time","currency","gbp","pip","market data","for",{"skillNo":214,"name":215,"nameZh":6,"description":216,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":217,"categories":218,"keywords":220,"publishedAt":38},"01M6Q5QM6VS84WZVM7BKXXPF32","yahoo-finance","This skill should be used when the user asks to \"get stock prices\", \"check stock quotes\", \"look up earnings\", \"get financial data\", \"find trending stocks\", or needs stock market data from Yahoo Finance.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fyahoo-finance-cli\u002FSKILL.md",[219],{"categoryNo":190,"categoryName":191,"taxonomyType":142,"taxonomyTypeDesc":143},[193,194,196,221,222,223,224,225,226,204,227,228,229,230,231,232,233,234,161,211],"cli","homebrew","find","check","brew","up","local","get","stock","link","trending","sf","quotes","ln"]