[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6PY12WGSZ0GV3MYM79R321C":3,"skill-same:01M6PY12WGSZ0GV3MYM79R321C":131},{"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":28,"linkOnly":29,"markdownContent":30,"markdownBody":31,"frontMatter":32,"refName":33,"commitSha":34,"skillDirectory":35,"forksCount":36,"repositoryHtmlUrl":37,"repositoryHomepageUrl":6,"ownerHtmlUrl":38,"ownerBlogUrl":6,"ownerDescription":39,"updatedAt":40,"install":41,"resources":54},"01M6PY12WGSZ0GV3MYM79R321C","claude-oauth-refresher",null,"Keep your Claude access token fresh 24\u002F7. Automatically refreshes OAuth tokens before expiry so you never see authentication failures.","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安全与密码\u002Fclaude-oauth-refresher\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27],"OAuth","claude oauth refresher","authentication","access","never","token","tokens","fresh","keep","you","2026-11-10 10:12:30",false,"---\nname: claude-oauth-refresher\ndescription: Keep your Claude access token fresh 24\u002F7. Automatically refreshes OAuth tokens before expiry so you never see authentication failures.\n---\n\n# claude-oauth-refresher\n\n**Automatic OAuth token refresh for Claude Code CLI on macOS**\n\nKeep your Claude account logged in 24\u002F7 by automatically refreshing OAuth tokens before they expire.\n\n---\n\n## ⚠️ Requirements\n\nThis skill is **macOS-only** and requires:\n\n1. **macOS** (uses Keychain for secure credential storage)\n2. **Claude Code CLI** already installed (`claude` command available)\n3. **Already logged into your Claude account** (run `claude` then `login` - stores tokens in Keychain)\n4. **Clawdbot** installed and running\n\n**Not sure if you're set up?** Run the verification script:\n```bash\n.\u002Fverify-setup.sh\n```\n\n---\n\n## What It Does\n\n- **Monitors** your Claude CLI token expiration\n- **Refreshes** tokens automatically before they expire (default: 30 min buffer)\n- **Notifies** you with three notification types:\n  - ? Start: \"Refreshing Claude token...\" \n  - ✅ Success: \"Claude token refreshed!\"\n  - ❌ Failure: Detailed error with troubleshooting steps\n- **Logs** all refresh attempts for debugging\n\n---\n\n## Installation\n\n### Quick Setup (Recommended)\n\n```bash\ncd ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\n.\u002Finstall.sh\n```\n\n**This installer runs ONCE** and sets up automatic token refresh that runs every 2 hours.\n\nThe installer will:\n1. Verify your system meets requirements\n2. **Interactively configure** notification preferences\n3. Auto-detect your notification target (Telegram, Slack, etc.)\n4. Set up launchd for automatic refresh\n5. Test the refresh immediately\n\n**After installation:**\n- Config changes apply automatically (refresh script reads config each run)\n- Edit `claude-oauth-refresh-config.json` to change settings\n- Ask Clawdbot to modify settings for you\n- **Only re-run installer** if you need to reinstall or fix the job\n\n### Interactive Notification Setup\n\nDuring installation, you'll be prompted:\n\n```\nConfigure Notifications:\n? Recommendation: Keep all enabled for the first run to verify it works.\n   You can disable them later by:\n   1. Editing ~\u002Fclawd\u002Fclaude-oauth-refresh-config.json\n   2. Asking Clawdbot: \"disable Claude refresh notifications\"\n\nEnable \"? Refreshing token...\" notification? [Y\u002Fn]: \nEnable \"✅ Token refreshed!\" notification? [Y\u002Fn]: \nEnable \"❌ Refresh failed\" notification? [Y\u002Fn]: \n```\n\n**Recommendation:** Keep all enabled initially to verify everything works, then disable start\u002Fsuccess notifications once you're confident.\n\n---\n\n## Managing Notifications with Clawdbot\n\n**You can ask Clawdbot to change notification settings for you!** No need to edit JSON manually.\n\n### Examples\n\n**Disable specific notification types:**\n```\n\"disable Claude refresh start notifications\"\n\"disable Claude refresh success notifications\"\n\"turn off Claude token refresh start messages\"\n```\n\n**Enable notification types:**\n```\n\"enable Claude refresh start notifications\"\n\"enable all Claude refresh notifications\"\n\"turn on Claude token refresh success messages\"\n```\n\n**Check current settings:**\n```\n\"show Claude refresh notification settings\"\n\"what are my Claude token refresh notification settings?\"\n```\n\n**Disable all notifications:**\n```\n\"disable all Claude refresh notifications\"\n\"turn off all Claude token notifications\"\n```\n\n**Reset to defaults:**\n```\n\"reset Claude refresh notifications to defaults\"\n```\n\n### How It Works\n\nClawdbot will:\n1. Read your `~\u002Fclawd\u002Fclaude-oauth-refresh-config.json`\n2. Update the appropriate notification flags\n3. Save the file\n4. Confirm the changes\n\n**Changes apply immediately** on the next refresh (no need to restart anything).\n\n---\n\n## Auto-Detection (Smart Defaults)\n\n**The install script automatically detects your notification settings!**\n\nIt reads `~\u002F.clawdbot\u002Fclawdbot.json` to find:\n- Which messaging channels you have enabled\n- Your chat ID, phone number, or user ID\n- Automatically populates `claude-oauth-refresh-config.json` with these values\n\n**Example:** If you have Telegram enabled with chat ID `123456789`, the installer creates:\n```json\n{\n  \"notification_channel\": \"telegram\",\n  \"notification_target\": \"123456789\"\n}\n```\n\n**To override:** Simply edit `claude-oauth-refresh-config.json` after installation to use a different channel or target.\n\n**If auto-detection fails:** The installer will prompt you to configure manually (see \"Finding Your Target ID\" below).\n\n**Test detection before installing:**\n```bash\n.\u002Ftest-detection.sh\n# Shows what would be auto-detected without modifying anything\n```\n\n---\n\n## Finding Your Target ID\n\nTo receive notifications, you need to configure your `notification_target` in `claude-oauth-refresh-config.json`. Here's how to find it for each channel:\n\n### Telegram\n\n**Format:** Numeric chat ID (e.g., `123456789`)\n\n**How to find:**\n```bash\n# Option 1: Use Clawdbot CLI\nclawdbot message telegram account list\n\n# Option 2: Message @userinfobot on Telegram\n# Send any message, it will reply with your ID\n\n# Option 3: Check recent messages\nclawdbot message telegram message search --limit 1 --from-me true\n```\n\n**Example config:**\n```json\n{\n  \"notification_channel\": \"telegram\",\n  \"notification_target\": \"123456789\"\n}\n```\n\n### Slack\n\n**Format:** \n- Direct messages: `user:U01234ABCD`\n- Channels: `channel:C01234ABCD`\n\n**How to find:**\n```bash\n# List channels\nclawdbot message slack channel list\n\n# Find user ID\nclawdbot message slack user list | grep \"your.email@company.com\"\n\n# Or click on your profile in Slack → More → Copy member ID\n```\n\n**Example config:**\n```json\n{\n  \"notification_channel\": \"slack\",\n  \"notification_target\": \"user:U01234ABCD\"\n}\n```\n\n### Discord\n\n**Format:**\n- Direct messages: `user:123456789012345678`\n- Channels: `channel:123456789012345678`\n\n**How to find:**\n```bash\n# Enable Developer Mode in Discord (Settings → Advanced → Developer Mode)\n# Then right-click your username → Copy ID\n\n# Or list channels\nclawdbot message discord channel list\n```\n\n**Example config:**\n```json\n{\n  \"notification_channel\": \"discord\",\n  \"notification_target\": \"user:123456789012345678\"\n}\n```\n\n### WhatsApp\n\n**Format:** E.164 phone number (e.g., `+15551234567`)\n\n**How to find:**\n- Use your full phone number with country code\n- Format: `+[country code][number]` (no spaces, dashes, or parentheses)\n\n**Examples:**\n- US: `+15551234567`\n- UK: `+447911123456`\n- Australia: `+61412345678`\n\n**Example config:**\n```json\n{\n  \"notification_channel\": \"whatsapp\",\n  \"notification_target\": \"+15551234567\"\n}\n```\n\n### iMessage\n\n**Format (preferred):** `chat_id:123`\n\n**How to find:**\n```bash\n# List recent chats to find your chat_id\nclawdbot message imessage thread list --limit 10\n\n# Find the chat with yourself or your preferred device\n```\n\n**Alternative formats:**\n- Phone: `+15551234567` (E.164 format)\n- Email: `your.email@icloud.com`\n\n**Example config:**\n```json\n{\n  \"notification_channel\": \"imessage\",\n  \"notification_target\": \"chat_id:123\"\n}\n```\n\n### Signal\n\n**Format:** E.164 phone number (e.g., `+15551234567`)\n\n**How to find:**\n- Use your Signal-registered phone number\n- Format: `+[country code][number]` (no spaces, dashes, or parentheses)\n\n**Example config:**\n```json\n{\n  \"notification_channel\": \"signal\",\n  \"notification_target\": \"+15551234567\"\n}\n```\n\n---\n\n## Configuration\n\n**File:** `claude-oauth-refresh-config.json`\n\n```json\n{\n  \"refresh_buffer_minutes\": 30,\n  \"log_file\": \"~\u002Fclawd\u002Flogs\u002Fclaude-oauth-refresh.log\",\n  \"notifications\": {\n    \"on_start\": true,\n    \"on_success\": true,\n    \"on_failure\": true\n  },\n  \"notification_channel\": \"telegram\",\n  \"notification_target\": \"YOUR_CHAT_ID\"\n}\n```\n\n### Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `refresh_buffer_minutes` | number | `30` | Refresh tokens this many minutes before expiry |\n| `log_file` | string | `~\u002Fclawd\u002Flogs\u002Fclaude-oauth-refresh.log` | Where to write logs |\n| `notifications.on_start` | boolean | `true` | Send \"? Refreshing token...\" notification |\n| `notifications.on_success` | boolean | `true` | Send \"✅ Token refreshed!\" notification |\n| `notifications.on_failure` | boolean | `true` | Send \"❌ Refresh failed\" notification with details |\n| `notification_channel` | string | `telegram` | Channel to use (see above for options) |\n| `notification_target` | string | `YOUR_CHAT_ID` | Target ID (see \"Finding Your Target ID\") |\n\n### Notification Types Explained\n\n**? Start (`on_start`)**\n- Sent when refresh process begins\n- Useful for debugging or knowing when refresh runs\n- **Recommendation:** Disable once you verify it works (can be noisy)\n\n**✅ Success (`on_success`)**\n- Sent when token successfully refreshed\n- Includes validity duration (e.g., \"valid for 24h\")\n- **Recommendation:** Disable once you trust the setup (can be noisy)\n\n**❌ Failure (`on_failure`)**\n- Sent when refresh fails with detailed error info\n- Includes troubleshooting steps based on error type\n- **Recommendation:** Keep enabled! You want to know about failures.\n\n### Example Configurations\n\n**Minimal (failures only):**\n```json\n{\n  \"notifications\": {\n    \"on_start\": false,\n    \"on_success\": false,\n    \"on_failure\": true\n  }\n}\n```\n\n**Verbose (all notifications):**\n```json\n{\n  \"notifications\": {\n    \"on_start\": true,\n    \"on_success\": true,\n    \"on_failure\": true\n  }\n}\n```\n\n**Silent (no notifications):**\n```json\n{\n  \"notifications\": {\n    \"on_start\": false,\n    \"on_success\": false,\n    \"on_failure\": false\n  }\n}\n```\n\n---\n\n## Detailed Failure Messages\n\nWhen a refresh fails, you'll receive a detailed notification with:\n\n1. **Error message** - What went wrong\n2. **Details** - Additional context (HTTP codes, error responses, etc.)\n3. **Troubleshooting** - Specific steps based on the error type\n4. **Help** - Where to find logs and get support\n\n### Example Failure Notification\n\n```\n❌ Claude token refresh failed\n\nError: Network timeout connecting to auth.anthropic.com\nDetails: Connection timed out after 30s\n\nTroubleshooting:\n- Check your internet connection\n- Verify you can reach auth.anthropic.com\n- Try running manually: ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\u002Frefresh-token.sh\n\nNeed help? Message Clawdbot or check logs:\n~\u002Fclawd\u002Flogs\u002Fclaude-oauth-refresh.log\n```\n\n### Common Errors and Solutions\n\n**Network\u002FTimeout Errors**\n```\nTroubleshooting:\n- Check your internet connection\n- Verify you can reach auth.anthropic.com\n- Try running manually: .\u002Frefresh-token.sh\n```\n\n**Invalid Refresh Token**\n```\nTroubleshooting:\n- Your refresh token may have expired\n- Re-authenticate: claude auth logout && claude auth\n- Verify Keychain access: security find-generic-password -s 'claude-cli-auth' -a 'default'\n```\n\n**Keychain Access Denied**\n```\nTroubleshooting:\n- Check Keychain permissions\n- Re-run authentication: claude auth\n- Verify setup: .\u002Fverify-setup.sh\n```\n\n**Missing Auth Profile**\n```\nTroubleshooting:\n- Run: claude auth\n- Verify file exists: ~\u002F.config\u002Fclaude\u002Fauth-profiles.json\n- Check file permissions: chmod 600 ~\u002F.config\u002Fclaude\u002Fauth-profiles.json\n```\n\n---\n\n## Usage\n\n### Check Status\n\n```bash\n# View recent logs\ntail -f ~\u002Fclawd\u002Flogs\u002Fclaude-oauth-refresh.log\n\n# Check launchd status\nlaunchctl list | grep claude-oauth-refresher\n\n# Manual refresh (for testing)\ncd ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\n.\u002Frefresh-token.sh\n```\n\n### Modify Settings\n\n**Option 1: Ask Clawdbot (easiest)**\n```\n\"disable Claude refresh start notifications\"\n\"show Claude refresh notification settings\"\n```\n\n**Option 2: Edit config file**\n```bash\nnano ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\u002Fclaude-oauth-refresh-config.json\n```\n\nChanges apply automatically on next refresh (every 2 hours, or when you run manually).\n\n**No need to restart anything!** The refresh script reads the config file each time it runs.\n\n---\n\n## Troubleshooting\n\n### Problem: `verify-setup.sh` says Claude CLI not found\n\n**Solution:**\n```bash\n# Install Claude CLI\nbrew install claude\n\n# Or download from https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-cli\n```\n\n---\n\n### Problem: `verify-setup.sh` says no refresh token found\n\n**Solution:**\n```bash\n# Authenticate with Claude\nclaude auth\n\n# Follow the prompts to log in\n```\n\n---\n\n### Problem: Notifications not arriving\n\n**Solution:**\n1. Check your `notification_target` format matches the examples above\n2. Test manually:\n   ```bash\n   clawdbot message [channel] send --target \"[your_target]\" --message \"Test\"\n   ```\n3. Check Clawdbot is running: `clawdbot gateway status`\n4. Verify notification settings:\n   ```bash\n   cat ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\u002Fclaude-oauth-refresh-config.json | jq .notifications\n   ```\n\n---\n\n### Problem: Token refresh fails with \"invalid_grant\"\n\n**Solution:**\n```bash\n# Re-authenticate from scratch\nclaude auth logout\nclaude auth\n\n# Test refresh again\ncd ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\n.\u002Frefresh-token.sh\n```\n\n---\n\n### Problem: \"Config file not found\" after upgrade\n\n**Solution:**\nThe config file was renamed from `config.json` to `claude-oauth-refresh-config.json`.\n\n```bash\n# If you have an old config.json, run the installer to migrate:\ncd ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\n.\u002Finstall.sh\n# Choose to keep existing config when prompted\n```\n\n---\n\n### Problem: Want to reinstall or fix the job\n\n**Solution:**\n```bash\n# Re-run the installer (safe to run multiple times)\ncd ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\n.\u002Finstall.sh\n```\n\nThe installer will:\n- Detect existing config and ask if you want to keep it\n- Update the launchd job\n- Test the refresh\n\n---\n\n## Uninstall\n\n```bash\ncd ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\n.\u002Funinstall.sh\n```\n\nThis will:\n- Stop and unload the launchd service\n- Remove the plist file\n- Optionally delete logs and config\n\n---\n\n## How It Works\n\n1. **Installer (`install.sh`)** - Run ONCE to set up:\n   - Auto-detects notification target\n   - Interactively configures notification types\n   - Creates launchd job\n   - Tests refresh immediately\n\n2. **Launchd** - Runs `refresh-token.sh` every 2 hours automatically\n\n3. **Refresh Script (`refresh-token.sh`)** - Each run:\n   - Reads config file (changes apply automatically!)\n   - Checks token expiration from `~\u002F.config\u002Fclaude\u002Fauth-profiles.json`\n   - If token expires within buffer window (default 30 min):\n     - Sends start notification (if enabled)\n     - Retrieves refresh token from Keychain\n     - Calls OAuth endpoint to get new tokens\n     - Updates auth profile and Keychain\n     - Sends success notification (if enabled)\n   - If refresh fails:\n     - Sends detailed failure notification with troubleshooting\n   - All activity logged to `~\u002Fclawd\u002Flogs\u002Fclaude-oauth-refresh.log`\n\n4. **Config Changes** - Applied automatically:\n   - Edit `claude-oauth-refresh-config.json` anytime\n   - Ask Clawdbot to edit for you\n   - Changes take effect on next refresh\n   - No restart needed!\n\n---\n\n## Security\n\n- **Tokens are never written to logs or config files**\n- Refresh tokens stored securely in macOS Keychain\n- Access tokens cached in `~\u002F.config\u002Fclaude\u002Fauth-profiles.json` (permissions: 600)\n- All HTTP requests use Claude's official OAuth endpoints\n- Config file is world-readable (contains no secrets)\n\n---\n\n## Support\n\n**Logs:** `~\u002Fclawd\u002Flogs\u002Fclaude-oauth-refresh.log`\n\n**Issues:**\n1. Run `.\u002Fverify-setup.sh` to diagnose\n2. Check logs for detailed error messages\n3. Test manual refresh: `.\u002Frefresh-token.sh`\n4. Check notification settings: `cat claude-oauth-refresh-config.json | jq .notifications`\n\n**Need help?** Open an issue with:\n- Output of `.\u002Fverify-setup.sh`\n- Last 20 lines of logs: `tail -20 ~\u002Fclawd\u002Flogs\u002Fclaude-oauth-refresh.log`\n- macOS version: `sw_vers`\n- Config (redacted): `cat claude-oauth-refresh-config.json | jq 'del(.notification_target)'`\n","# claude-oauth-refresher\n\n**Automatic OAuth token refresh for Claude Code CLI on macOS**\n\nKeep your Claude account logged in 24\u002F7 by automatically refreshing OAuth tokens before they expire.\n\n---\n\n## ⚠️ Requirements\n\nThis skill is **macOS-only** and requires:\n\n1. **macOS** (uses Keychain for secure credential storage)\n2. **Claude Code CLI** already installed (`claude` command available)\n3. **Already logged into your Claude account** (run `claude` then `login` - stores tokens in Keychain)\n4. **Clawdbot** installed and running\n\n**Not sure if you're set up?** Run the verification script:\n```bash\n.\u002Fverify-setup.sh\n```\n\n---\n\n## What It Does\n\n- **Monitors** your Claude CLI token expiration\n- **Refreshes** tokens automatically before they expire (default: 30 min buffer)\n- **Notifies** you with three notification types:\n  - ? Start: \"Refreshing Claude token...\" \n  - ✅ Success: \"Claude token refreshed!\"\n  - ❌ Failure: Detailed error with troubleshooting steps\n- **Logs** all refresh attempts for debugging\n\n---\n\n## Installation\n\n### Quick Setup (Recommended)\n\n```bash\ncd ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\n.\u002Finstall.sh\n```\n\n**This installer runs ONCE** and sets up automatic token refresh that runs every 2 hours.\n\nThe installer will:\n1. Verify your system meets requirements\n2. **Interactively configure** notification preferences\n3. Auto-detect your notification target (Telegram, Slack, etc.)\n4. Set up launchd for automatic refresh\n5. Test the refresh immediately\n\n**After installation:**\n- Config changes apply automatically (refresh script reads config each run)\n- Edit `claude-oauth-refresh-config.json` to change settings\n- Ask Clawdbot to modify settings for you\n- **Only re-run installer** if you need to reinstall or fix the job\n\n### Interactive Notification Setup\n\nDuring installation, you'll be prompted:\n\n```\nConfigure Notifications:\n? Recommendation: Keep all enabled for the first run to verify it works.\n   You can disable them later by:\n   1. Editing ~\u002Fclawd\u002Fclaude-oauth-refresh-config.json\n   2. Asking Clawdbot: \"disable Claude refresh notifications\"\n\nEnable \"? Refreshing token...\" notification? [Y\u002Fn]: \nEnable \"✅ Token refreshed!\" notification? [Y\u002Fn]: \nEnable \"❌ Refresh failed\" notification? [Y\u002Fn]: \n```\n\n**Recommendation:** Keep all enabled initially to verify everything works, then disable start\u002Fsuccess notifications once you're confident.\n\n---\n\n## Managing Notifications with Clawdbot\n\n**You can ask Clawdbot to change notification settings for you!** No need to edit JSON manually.\n\n### Examples\n\n**Disable specific notification types:**\n```\n\"disable Claude refresh start notifications\"\n\"disable Claude refresh success notifications\"\n\"turn off Claude token refresh start messages\"\n```\n\n**Enable notification types:**\n```\n\"enable Claude refresh start notifications\"\n\"enable all Claude refresh notifications\"\n\"turn on Claude token refresh success messages\"\n```\n\n**Check current settings:**\n```\n\"show Claude refresh notification settings\"\n\"what are my Claude token refresh notification settings?\"\n```\n\n**Disable all notifications:**\n```\n\"disable all Claude refresh notifications\"\n\"turn off all Claude token notifications\"\n```\n\n**Reset to defaults:**\n```\n\"reset Claude refresh notifications to defaults\"\n```\n\n### How It Works\n\nClawdbot will:\n1. Read your `~\u002Fclawd\u002Fclaude-oauth-refresh-config.json`\n2. Update the appropriate notification flags\n3. Save the file\n4. Confirm the changes\n\n**Changes apply immediately** on the next refresh (no need to restart anything).\n\n---\n\n## Auto-Detection (Smart Defaults)\n\n**The install script automatically detects your notification settings!**\n\nIt reads `~\u002F.clawdbot\u002Fclawdbot.json` to find:\n- Which messaging channels you have enabled\n- Your chat ID, phone number, or user ID\n- Automatically populates `claude-oauth-refresh-config.json` with these values\n\n**Example:** If you have Telegram enabled with chat ID `123456789`, the installer creates:\n```json\n{\n  \"notification_channel\": \"telegram\",\n  \"notification_target\": \"123456789\"\n}\n```\n\n**To override:** Simply edit `claude-oauth-refresh-config.json` after installation to use a different channel or target.\n\n**If auto-detection fails:** The installer will prompt you to configure manually (see \"Finding Your Target ID\" below).\n\n**Test detection before installing:**\n```bash\n.\u002Ftest-detection.sh\n# Shows what would be auto-detected without modifying anything\n```\n\n---\n\n## Finding Your Target ID\n\nTo receive notifications, you need to configure your `notification_target` in `claude-oauth-refresh-config.json`. Here's how to find it for each channel:\n\n### Telegram\n\n**Format:** Numeric chat ID (e.g., `123456789`)\n\n**How to find:**\n```bash\n# Option 1: Use Clawdbot CLI\nclawdbot message telegram account list\n\n# Option 2: Message @userinfobot on Telegram\n# Send any message, it will reply with your ID\n\n# Option 3: Check recent messages\nclawdbot message telegram message search --limit 1 --from-me true\n```\n\n**Example config:**\n```json\n{\n  \"notification_channel\": \"telegram\",\n  \"notification_target\": \"123456789\"\n}\n```\n\n### Slack\n\n**Format:** \n- Direct messages: `user:U01234ABCD`\n- Channels: `channel:C01234ABCD`\n\n**How to find:**\n```bash\n# List channels\nclawdbot message slack channel list\n\n# Find user ID\nclawdbot message slack user list | grep \"your.email@company.com\"\n\n# Or click on your profile in Slack → More → Copy member ID\n```\n\n**Example config:**\n```json\n{\n  \"notification_channel\": \"slack\",\n  \"notification_target\": \"user:U01234ABCD\"\n}\n```\n\n### Discord\n\n**Format:**\n- Direct messages: `user:123456789012345678`\n- Channels: `channel:123456789012345678`\n\n**How to find:**\n```bash\n# Enable Developer Mode in Discord (Settings → Advanced → Developer Mode)\n# Then right-click your username → Copy ID\n\n# Or list channels\nclawdbot message discord channel list\n```\n\n**Example config:**\n```json\n{\n  \"notification_channel\": \"discord\",\n  \"notification_target\": \"user:123456789012345678\"\n}\n```\n\n### WhatsApp\n\n**Format:** E.164 phone number (e.g., `+15551234567`)\n\n**How to find:**\n- Use your full phone number with country code\n- Format: `+[country code][number]` (no spaces, dashes, or parentheses)\n\n**Examples:**\n- US: `+15551234567`\n- UK: `+447911123456`\n- Australia: `+61412345678`\n\n**Example config:**\n```json\n{\n  \"notification_channel\": \"whatsapp\",\n  \"notification_target\": \"+15551234567\"\n}\n```\n\n### iMessage\n\n**Format (preferred):** `chat_id:123`\n\n**How to find:**\n```bash\n# List recent chats to find your chat_id\nclawdbot message imessage thread list --limit 10\n\n# Find the chat with yourself or your preferred device\n```\n\n**Alternative formats:**\n- Phone: `+15551234567` (E.164 format)\n- Email: `your.email@icloud.com`\n\n**Example config:**\n```json\n{\n  \"notification_channel\": \"imessage\",\n  \"notification_target\": \"chat_id:123\"\n}\n```\n\n### Signal\n\n**Format:** E.164 phone number (e.g., `+15551234567`)\n\n**How to find:**\n- Use your Signal-registered phone number\n- Format: `+[country code][number]` (no spaces, dashes, or parentheses)\n\n**Example config:**\n```json\n{\n  \"notification_channel\": \"signal\",\n  \"notification_target\": \"+15551234567\"\n}\n```\n\n---\n\n## Configuration\n\n**File:** `claude-oauth-refresh-config.json`\n\n```json\n{\n  \"refresh_buffer_minutes\": 30,\n  \"log_file\": \"~\u002Fclawd\u002Flogs\u002Fclaude-oauth-refresh.log\",\n  \"notifications\": {\n    \"on_start\": true,\n    \"on_success\": true,\n    \"on_failure\": true\n  },\n  \"notification_channel\": \"telegram\",\n  \"notification_target\": \"YOUR_CHAT_ID\"\n}\n```\n\n### Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `refresh_buffer_minutes` | number | `30` | Refresh tokens this many minutes before expiry |\n| `log_file` | string | `~\u002Fclawd\u002Flogs\u002Fclaude-oauth-refresh.log` | Where to write logs |\n| `notifications.on_start` | boolean | `true` | Send \"? Refreshing token...\" notification |\n| `notifications.on_success` | boolean | `true` | Send \"✅ Token refreshed!\" notification |\n| `notifications.on_failure` | boolean | `true` | Send \"❌ Refresh failed\" notification with details |\n| `notification_channel` | string | `telegram` | Channel to use (see above for options) |\n| `notification_target` | string | `YOUR_CHAT_ID` | Target ID (see \"Finding Your Target ID\") |\n\n### Notification Types Explained\n\n**? Start (`on_start`)**\n- Sent when refresh process begins\n- Useful for debugging or knowing when refresh runs\n- **Recommendation:** Disable once you verify it works (can be noisy)\n\n**✅ Success (`on_success`)**\n- Sent when token successfully refreshed\n- Includes validity duration (e.g., \"valid for 24h\")\n- **Recommendation:** Disable once you trust the setup (can be noisy)\n\n**❌ Failure (`on_failure`)**\n- Sent when refresh fails with detailed error info\n- Includes troubleshooting steps based on error type\n- **Recommendation:** Keep enabled! You want to know about failures.\n\n### Example Configurations\n\n**Minimal (failures only):**\n```json\n{\n  \"notifications\": {\n    \"on_start\": false,\n    \"on_success\": false,\n    \"on_failure\": true\n  }\n}\n```\n\n**Verbose (all notifications):**\n```json\n{\n  \"notifications\": {\n    \"on_start\": true,\n    \"on_success\": true,\n    \"on_failure\": true\n  }\n}\n```\n\n**Silent (no notifications):**\n```json\n{\n  \"notifications\": {\n    \"on_start\": false,\n    \"on_success\": false,\n    \"on_failure\": false\n  }\n}\n```\n\n---\n\n## Detailed Failure Messages\n\nWhen a refresh fails, you'll receive a detailed notification with:\n\n1. **Error message** - What went wrong\n2. **Details** - Additional context (HTTP codes, error responses, etc.)\n3. **Troubleshooting** - Specific steps based on the error type\n4. **Help** - Where to find logs and get support\n\n### Example Failure Notification\n\n```\n❌ Claude token refresh failed\n\nError: Network timeout connecting to auth.anthropic.com\nDetails: Connection timed out after 30s\n\nTroubleshooting:\n- Check your internet connection\n- Verify you can reach auth.anthropic.com\n- Try running manually: ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\u002Frefresh-token.sh\n\nNeed help? Message Clawdbot or check logs:\n~\u002Fclawd\u002Flogs\u002Fclaude-oauth-refresh.log\n```\n\n### Common Errors and Solutions\n\n**Network\u002FTimeout Errors**\n```\nTroubleshooting:\n- Check your internet connection\n- Verify you can reach auth.anthropic.com\n- Try running manually: .\u002Frefresh-token.sh\n```\n\n**Invalid Refresh Token**\n```\nTroubleshooting:\n- Your refresh token may have expired\n- Re-authenticate: claude auth logout && claude auth\n- Verify Keychain access: security find-generic-password -s 'claude-cli-auth' -a 'default'\n```\n\n**Keychain Access Denied**\n```\nTroubleshooting:\n- Check Keychain permissions\n- Re-run authentication: claude auth\n- Verify setup: .\u002Fverify-setup.sh\n```\n\n**Missing Auth Profile**\n```\nTroubleshooting:\n- Run: claude auth\n- Verify file exists: ~\u002F.config\u002Fclaude\u002Fauth-profiles.json\n- Check file permissions: chmod 600 ~\u002F.config\u002Fclaude\u002Fauth-profiles.json\n```\n\n---\n\n## Usage\n\n### Check Status\n\n```bash\n# View recent logs\ntail -f ~\u002Fclawd\u002Flogs\u002Fclaude-oauth-refresh.log\n\n# Check launchd status\nlaunchctl list | grep claude-oauth-refresher\n\n# Manual refresh (for testing)\ncd ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\n.\u002Frefresh-token.sh\n```\n\n### Modify Settings\n\n**Option 1: Ask Clawdbot (easiest)**\n```\n\"disable Claude refresh start notifications\"\n\"show Claude refresh notification settings\"\n```\n\n**Option 2: Edit config file**\n```bash\nnano ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\u002Fclaude-oauth-refresh-config.json\n```\n\nChanges apply automatically on next refresh (every 2 hours, or when you run manually).\n\n**No need to restart anything!** The refresh script reads the config file each time it runs.\n\n---\n\n## Troubleshooting\n\n### Problem: `verify-setup.sh` says Claude CLI not found\n\n**Solution:**\n```bash\n# Install Claude CLI\nbrew install claude\n\n# Or download from https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-cli\n```\n\n---\n\n### Problem: `verify-setup.sh` says no refresh token found\n\n**Solution:**\n```bash\n# Authenticate with Claude\nclaude auth\n\n# Follow the prompts to log in\n```\n\n---\n\n### Problem: Notifications not arriving\n\n**Solution:**\n1. Check your `notification_target` format matches the examples above\n2. Test manually:\n   ```bash\n   clawdbot message [channel] send --target \"[your_target]\" --message \"Test\"\n   ```\n3. Check Clawdbot is running: `clawdbot gateway status`\n4. Verify notification settings:\n   ```bash\n   cat ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\u002Fclaude-oauth-refresh-config.json | jq .notifications\n   ```\n\n---\n\n### Problem: Token refresh fails with \"invalid_grant\"\n\n**Solution:**\n```bash\n# Re-authenticate from scratch\nclaude auth logout\nclaude auth\n\n# Test refresh again\ncd ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\n.\u002Frefresh-token.sh\n```\n\n---\n\n### Problem: \"Config file not found\" after upgrade\n\n**Solution:**\nThe config file was renamed from `config.json` to `claude-oauth-refresh-config.json`.\n\n```bash\n# If you have an old config.json, run the installer to migrate:\ncd ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\n.\u002Finstall.sh\n# Choose to keep existing config when prompted\n```\n\n---\n\n### Problem: Want to reinstall or fix the job\n\n**Solution:**\n```bash\n# Re-run the installer (safe to run multiple times)\ncd ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\n.\u002Finstall.sh\n```\n\nThe installer will:\n- Detect existing config and ask if you want to keep it\n- Update the launchd job\n- Test the refresh\n\n---\n\n## Uninstall\n\n```bash\ncd ~\u002Fclawd\u002Fskills\u002Fclaude-oauth-refresher\n.\u002Funinstall.sh\n```\n\nThis will:\n- Stop and unload the launchd service\n- Remove the plist file\n- Optionally delete logs and config\n\n---\n\n## How It Works\n\n1. **Installer (`install.sh`)** - Run ONCE to set up:\n   - Auto-detects notification target\n   - Interactively configures notification types\n   - Creates launchd job\n   - Tests refresh immediately\n\n2. **Launchd** - Runs `refresh-token.sh` every 2 hours automatically\n\n3. **Refresh Script (`refresh-token.sh`)** - Each run:\n   - Reads config file (changes apply automatically!)\n   - Checks token expiration from `~\u002F.config\u002Fclaude\u002Fauth-profiles.json`\n   - If token expires within buffer window (default 30 min):\n     - Sends start notification (if enabled)\n     - Retrieves refresh token from Keychain\n     - Calls OAuth endpoint to get new tokens\n     - Updates auth profile and Keychain\n     - Sends success notification (if enabled)\n   - If refresh fails:\n     - Sends detailed failure notification with troubleshooting\n   - All activity logged to `~\u002Fclawd\u002Flogs\u002Fclaude-oauth-refresh.log`\n\n4. **Config Changes** - Applied automatically:\n   - Edit `claude-oauth-refresh-config.json` anytime\n   - Ask Clawdbot to edit for you\n   - Changes take effect on next refresh\n   - No restart needed!\n\n---\n\n## Security\n\n- **Tokens are never written to logs or config files**\n- Refresh tokens stored securely in macOS Keychain\n- Access tokens cached in `~\u002F.config\u002Fclaude\u002Fauth-profiles.json` (permissions: 600)\n- All HTTP requests use Claude's official OAuth endpoints\n- Config file is world-readable (contains no secrets)\n\n---\n\n## Support\n\n**Logs:** `~\u002Fclawd\u002Flogs\u002Fclaude-oauth-refresh.log`\n\n**Issues:**\n1. Run `.\u002Fverify-setup.sh` to diagnose\n2. Check logs for detailed error messages\n3. Test manual refresh: `.\u002Frefresh-token.sh`\n4. Check notification settings: `cat claude-oauth-refresh-config.json | jq .notifications`\n\n**Need help?** Open an issue with:\n- Output of `.\u002Fverify-setup.sh`\n- Last 20 lines of logs: `tail -20 ~\u002Fclawd\u002Flogs\u002Fclaude-oauth-refresh.log`\n- macOS version: `sw_vers`\n- Config (redacted): `cat claude-oauth-refresh-config.json | jq 'del(.notification_target)'`\n",{"name":5,"description":7},"main","f4cb2d49f7667e79ef7804f50396d5aaffdf1f56","安全与密码\u002Fclaude-oauth-refresher",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":42,"prompt":52,"zipAvailable":53},[43,46,49],{"tool":44,"command":45},"npx","npx skills add Kernel8901\u002Fai-agent-skills-classification --skill claude-oauth-refresher",{"tool":47,"command":48},"bunx","bunx skills add Kernel8901\u002Fai-agent-skills-classification --skill claude-oauth-refresher",{"tool":50,"command":51},"pnpm","pnpm dlx skills add Kernel8901\u002Fai-agent-skills-classification --skill claude-oauth-refresher","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002FSKILL.md",true,[55,61,65,69,73,77,81,87,91,95,99,103,107,111,115,119,123,127],{"path":56,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":59,"sourceHtmlUrl":60},"_meta.json","REFERENCE","参考文档",1186,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002F_meta.json",{"path":62,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":63,"sourceHtmlUrl":64},"AUTO-DETECTION-FLOW.md",7050,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002FAUTO-DETECTION-FLOW.md",{"path":66,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":67,"sourceHtmlUrl":68},"CHANGES.md",11036,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002FCHANGES.md",{"path":70,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":71,"sourceHtmlUrl":72},"claude-oauth-refresh-config.example.json",916,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002Fclaude-oauth-refresh-config.example.json",{"path":74,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":75,"sourceHtmlUrl":76},"COMPLETION-REPORT.md",9519,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002FCOMPLETION-REPORT.md",{"path":78,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":79,"sourceHtmlUrl":80},"DELIVERABLES.txt",12689,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002FDELIVERABLES.txt",{"path":82,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"detect-notification-config.sh","SCRIPT","脚本",3771,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002Fdetect-notification-config.sh",{"path":88,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":89,"sourceHtmlUrl":90},"DETECTION-EXAMPLES.md",3063,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002FDETECTION-EXAMPLES.md",{"path":92,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":93,"sourceHtmlUrl":94},"install.sh",10677,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002Finstall.sh",{"path":96,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":97,"sourceHtmlUrl":98},"QUICKSTART.md",3365,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002FQUICKSTART.md",{"path":100,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":101,"sourceHtmlUrl":102},"README.md",7012,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002FREADME.md",{"path":104,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":105,"sourceHtmlUrl":106},"refresh-token.sh",10796,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002Frefresh-token.sh",{"path":108,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":109,"sourceHtmlUrl":110},"SUMMARY.md",8888,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002FSUMMARY.md",{"path":112,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":113,"sourceHtmlUrl":114},"test-detection.sh",2716,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002Ftest-detection.sh",{"path":116,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":117,"sourceHtmlUrl":118},"uninstall.sh",3928,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002Funinstall.sh",{"path":120,"resourceType":57,"resourceTypeDesc":58,"sizeBytes":121,"sourceHtmlUrl":122},"UPGRADE.md",8328,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002FUPGRADE.md",{"path":124,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":125,"sourceHtmlUrl":126},"validate-update.sh",6111,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002Fvalidate-update.sh",{"path":128,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":129,"sourceHtmlUrl":130},"verify-setup.sh",8855,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F安全与密码\u002Fclaude-oauth-refresher\u002Fverify-setup.sh",[132,156,191,202,212,242],{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":28},"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",[],[134,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155],"safe","ethereum","defi","Optimization","user","use","Wallet","base","deposit","withdraw","yield","arbitrum","non-custodial","passive","defi yield","earn","yield optimization",{"skillNo":157,"name":158,"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":159,"categories":160,"keywords":174,"publishedAt":28},"01M6Q5R337B5JSNER4P4YS03TN","zerion-api","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api\u002FSKILL.md",[161,166,169],{"categoryNo":162,"categoryName":163,"taxonomyType":164,"taxonomyTypeDesc":165},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":167,"categoryName":168,"taxonomyType":164,"taxonomyTypeDesc":165},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":170,"categoryName":171,"taxonomyType":172,"taxonomyTypeDesc":173},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[175,176,177,178,179,180,181,141,182,145,183,184,185,186,187,188,189,23,190],"api","zerion api","zerion","MCP","mcp server","server","blockchain","transactions","crypto wallet","crypto","evm","solana","query","across","positions","prices",{"skillNo":192,"name":193,"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":194,"categories":195,"keywords":199,"publishedAt":28},"01M6Q5QZFYTDAZMZ27BN5VZXAR","zerion-api-skill","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api-skill\u002FSKILL.md",[196,197,198],{"categoryNo":162,"categoryName":163,"taxonomyType":164,"taxonomyTypeDesc":165},{"categoryNo":167,"categoryName":168,"taxonomyType":164,"taxonomyTypeDesc":165},{"categoryNo":170,"categoryName":171,"taxonomyType":172,"taxonomyTypeDesc":173},[175,200,201,176,177,178,179,180,181,141,182,145,184,185,186,187,188,189,23,190],"api skill","zerion api skill",{"skillNo":203,"name":204,"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":205,"categories":206,"keywords":210,"publishedAt":28},"01M6Q5QW17QW98RA3FE45E4RD8","zerion-api-mcp","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api-mcp\u002FSKILL.md",[207,208,209],{"categoryNo":162,"categoryName":163,"taxonomyType":164,"taxonomyTypeDesc":165},{"categoryNo":167,"categoryName":168,"taxonomyType":164,"taxonomyTypeDesc":165},{"categoryNo":170,"categoryName":171,"taxonomyType":172,"taxonomyTypeDesc":173},[178,175,211,176,177,179,180,141,182,145,183,184,185,186,187,188,189,23,190],"zerion api mcp",{"skillNo":213,"name":214,"nameZh":6,"description":215,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":216,"categories":217,"keywords":221,"publishedAt":28},"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",[218],{"categoryNo":219,"categoryName":220,"taxonomyType":172,"taxonomyTypeDesc":173},"01JBSEEDCAT000000000000040","财务",[222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241],"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":243,"name":244,"nameZh":6,"description":245,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":246,"categories":247,"keywords":249,"publishedAt":28},"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",[248],{"categoryNo":219,"categoryName":220,"taxonomyType":172,"taxonomyTypeDesc":173},[222,223,225,250,251,252,253,254,255,233,256,257,258,259,260,261,262,263,190,240],"cli","homebrew","find","check","brew","up","local","get","stock","link","trending","sf","quotes","ln"]