[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FJVH5P9RZKHWFSMBDQB28S":3,"skill-same:01M6FJVH5P9RZKHWFSMBDQB28S":48},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":21,"linkOnly":22,"markdownContent":23,"markdownBody":23,"frontMatter":24,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":28,"repositoryHtmlUrl":29,"repositoryHomepageUrl":30,"ownerHtmlUrl":31,"ownerBlogUrl":6,"ownerDescription":32,"updatedAt":33,"install":34,"resources":47},"01M6FJVH5P9RZKHWFSMBDQB28S","feishu-notify",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fwanshuiyin\u002FAuto-claude-code-research-in-sleep\u002Ffeishu-notify\u002FSKILL.md",[],[18,19,20],"feishu","notify","feishu notify","2026-11-10 10:12:30",false,"# Feishu\u002FLark Notification\n\nSend a notification: **$ARGUMENTS**\n\n## Overview\n\nThis skill provides Feishu\u002FLark integration for ARIS. It is designed as an **internal utility** — other skills call it at key events (experiment done, review scored, checkpoint waiting). It can also be invoked manually.\n\n**Zero-impact guarantee**: If no `feishu.json` config exists, this skill does nothing and returns silently. All existing workflows are completely unaffected.\n\n## Configuration\n\nThe skill reads `~\u002F.claude\u002Ffeishu.json`. If this file does not exist, **all Feishu functionality is disabled** — skills behave exactly as before.\n\n### Config Format\n\n```json\n{\n  \"mode\": \"push\",\n  \"webhook_url\": \"https:\u002F\u002Fopen.feishu.cn\u002Fopen-apis\u002Fbot\u002Fv2\u002Fhook\u002FYOUR_WEBHOOK_ID\",\n  \"interactive\": {\n    \"bridge_url\": \"http:\u002F\u002Flocalhost:5000\",\n    \"timeout_seconds\": 300\n  }\n}\n```\n\n### Modes\n\n| Mode | `\"mode\"` value | What it does | Requires |\n|------|----------------|--------------|----------|\n| **Off** | `\"off\"` or file absent | Nothing. Pure CLI as-is | Nothing |\n| **Push only** | `\"push\"` | Send webhook notifications at key events. Mobile push, no reply | Feishu bot webhook URL |\n| **Interactive** | `\"interactive\"` | Full bidirectional. Approve\u002Freject from Feishu, reply to checkpoints | [feishu-claude-code](https:\u002F\u002Fgithub.com\u002Fjoewongjc\u002Ffeishu-claude-code) running |\n\n## Workflow\n\n### Step 1: Read Config\n\n```bash\ncat ~\u002F.claude\u002Ffeishu.json 2>\u002Fdev\u002Fnull\n```\n\n- **File not found** → return silently, do nothing\n- **`\"mode\": \"off\"`** → return silently, do nothing\n- **`\"mode\": \"push\"`** → proceed to Step 2 (push)\n- **`\"mode\": \"interactive\"`** → proceed to Step 3 (interactive)\n\n### Step 2: Push Notification (webhook)\n\nSend a rich card to the Feishu webhook:\n\n```bash\ncurl -s -X POST \"$WEBHOOK_URL\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"msg_type\": \"interactive\",\n    \"card\": {\n      \"header\": {\n        \"title\": {\"tag\": \"plain_text\", \"content\": \"TITLE\"},\n        \"template\": \"COLOR\"\n      },\n      \"elements\": [\n        {\"tag\": \"markdown\", \"content\": \"BODY\"}\n      ]\n    }\n  }'\n```\n\n**Card templates by event type:**\n\n| Event | Title | Color | Body |\n|-------|-------|-------|------|\n| `experiment_done` | Experiment Complete | `green` | Results table, delta vs baseline |\n| `review_scored` | Review Round N: X\u002F10 | `blue` (≥6) \u002F `orange` (\u003C6) | Score, verdict, top 3 weaknesses |\n| `checkpoint` | Checkpoint: Waiting for Input | `yellow` | Question, options, context |\n| `error` | Error: [type] | `red` | Error message, what failed |\n| `pipeline_done` | Pipeline Complete | `purple` | Final summary, deliverables |\n| `custom` | Custom | `blue` | Free-form message from $ARGUMENTS |\n\n**Return immediately after curl** — push mode never waits for a response.\n\n### Step 3: Interactive Notification (bidirectional)\n\nInteractive mode uses [feishu-claude-code](https:\u002F\u002Fgithub.com\u002Fjoewongjc\u002Ffeishu-claude-code) as a bridge:\n\n1. **Send message** to the bridge:\n   ```bash\n   curl -s -X POST \"$BRIDGE_URL\u002Fsend\" \\\n     -H \"Content-Type: application\u002Fjson\" \\\n     -d '{\"type\": \"EVENT_TYPE\", \"title\": \"TITLE\", \"body\": \"BODY\", \"options\": [\"approve\", \"reject\", \"custom\"]}'\n   ```\n\n2. **Wait for reply** (with timeout):\n   ```bash\n   curl -s \"$BRIDGE_URL\u002Fpoll?timeout=$TIMEOUT_SECONDS\"\n   ```\n   Returns: `{\"reply\": \"approve\"}` or `{\"reply\": \"reject\"}` or `{\"reply\": \"user typed message\"}` or `{\"timeout\": true}`\n\n3. **On timeout**: Fall back to `AUTO_PROCEED` behavior (proceed with default option).\n\n4. **Return the user's reply** to the calling skill so it can act on it.\n\n### Step 4: Verify Delivery\n\n- **Push mode**: Check curl exit code. If non-zero, log warning but do NOT block the workflow.\n- **Interactive mode**: If bridge is unreachable, fall back to push mode (if webhook configured) or skip silently.\n\n## Helper Function (for other skills)\n\nOther skills should use this pattern to send notifications:\n\n```markdown\n### Feishu Notification (if configured)\n\nCheck if `~\u002F.claude\u002Ffeishu.json` exists and mode is not \"off\":\n- If **push** mode: send webhook notification with event summary\n- If **interactive** mode: send notification and wait for user reply\n- If **off** or file absent: skip entirely (no-op)\n```\n\n**This check is always guarded.** If the config file doesn't exist, the skill skips the notification block entirely — zero overhead, zero side effects.\n\n## Event Catalog\n\nSkills send these events at these moments:\n\n| Skill | Event | When |\n|-------|-------|------|\n| `\u002Fauto-review-loop` | `review_scored` | After each round's review score |\n| `\u002Fauto-review-loop` | `pipeline_done` | Loop complete (positive or max rounds) |\n| `\u002Fauto-paper-improvement-loop` | `review_scored` | After each round's review score |\n| `\u002Fauto-paper-improvement-loop` | `pipeline_done` | All rounds complete |\n| `\u002Frun-experiment` | `experiment_done` | Screen session finishes |\n| `\u002Fidea-discovery` | `checkpoint` | Between phases (if interactive) |\n| `\u002Fidea-discovery` | `pipeline_done` | Final report ready |\n| `\u002Fmonitor-experiment` | `experiment_done` | Results collected |\n| `\u002Fresearch-pipeline` | `checkpoint` | Between workflow stages |\n| `\u002Fresearch-pipeline` | `pipeline_done` | Full pipeline complete |\n\n## Key Rules\n\n- **NEVER block a workflow** because Feishu is unreachable. Always fail open.\n- **NEVER require Feishu config** — all skills must work without it.\n- **Config file absent = mode off.** No error, no warning, no log.\n- **Push mode is fire-and-forget.** Send curl, check exit code, move on.\n- **Interactive timeout = auto-proceed.** Don't hang forever waiting for a reply.\n- **Respect `AUTO_PROCEED`**: In interactive mode, if the user doesn't reply within timeout, use the same auto-proceed logic as the calling skill.\n- **No secrets in notifications.** Never include API keys, tokens, or passwords in Feishu messages.\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fwanshuiyin\u002FAuto-claude-code-research-in-sleep\u002Ffeishu-notify",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill feishu-notify",{"tool":40,"command":41},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill feishu-notify",{"tool":43,"command":44},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill feishu-notify","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fwanshuiyin\u002FAuto-claude-code-research-in-sleep\u002Ffeishu-notify\u002FSKILL.md",true,[],[49,63,73,82,88,95],{"skillNo":50,"name":51,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":59,"publishedAt":21},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[54],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[60,61,62],"model","model hierarchy","model hierarchy skill",{"skillNo":64,"name":65,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":69,"publishedAt":21},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[68],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},[70,71,72],"MCP","zoom","zoom mcp",{"skillNo":74,"name":75,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":21},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[79,80,81,71],"sdk","zoom apps sdk","apps",{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":21},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[84],{"skillNo":89,"name":90,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":94,"publishedAt":21},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[93],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},[90],{"skillNo":96,"name":97,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":21},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[97]]