mcpField
F
feishu-notify

feishu-notify

github.com/wanshuiyin生产力18.2k496 次安装4 天前更新
代码仓库

关于 feishu-notify

feishu-notify 是供 ARIS 技能使用的 Feishu/Lark 通知工具,也可手动调用。它支持仅推送或双向交互,并在未配置时静默跳过,不阻塞原有工作流。

主要功能

  1. 01发送事件通知卡片
  2. 02支持 webhook 推送模式
  3. 03支持双向交互与回复
  4. 04无配置时静默禁用
  5. 05交互超时后自动继续
  6. 06通知失败时不阻塞工作流

适用场景

  1. 01发送实验完成结果
  2. 02通知审查评分与弱项
  3. 03在检查点请求用户选择
  4. 04报告流水线完成或错误

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wanshuiyin/auto-claude-code-research-in-sleep --skill feishu-notify

安装后在 Claude Code 中输入/feishu-notify确认已加载。

详细介绍

飞书/Lark 通知

发送通知:$ARGUMENTS

概述

此技能为 ARIS 提供飞书/Lark 集成。它设计为一项内部工具——其他技能会在关键事件发生时调用它(实验完成、评审评分、检查点等待)。也可以手动调用。

零影响保证:如果不存在 feishu.json 配置,此技能不会执行任何操作,并静默返回。不会对任何现有工作流产生影响。

配置

此技能读取 ~/.claude/feishu.json。如果该文件不存在,所有飞书功能都会被禁用——技能的行为与之前完全相同。

配置格式
{
  "mode": "push",
  "webhook_url": "https://open.feishu.cn/open-apis/bot/v2/hook/YOUR_WEBHOOK_ID",
  "interactive": {
    "bridge_url": "http://localhost:5000",
    "timeout_seconds": 300
  }
}
模式
模式"mode" 值功能要求
关闭"off" 或文件不存在不执行任何操作。保持纯 CLI 原样无
仅推送"push"在关键事件发生时发送 webhook 通知。推送到移动端,不支持回复飞书机器人 webhook URL
交互式"interactive"完整双向交互。可在飞书中批准/拒绝,并回复检查点正在运行的 feishu-claude-code

工作流

第 1 步:读取配置
cat ~/.claude/feishu.json 2>/dev/null
  • 未找到文件 → 静默返回,不执行任何操作
  • "mode": "off" → 静默返回,不执行任何操作
  • "mode": "push" → 继续第 2 步(推送)
  • "mode": "interactive" → 继续第 3 步(交互式)
第 2 步:推送通知(webhook)

向飞书 webhook 发送富文本卡片:

curl -s -X POST "$WEBHOOK_URL" \
  -H "Content-Type: application/json" \
  -d '{
    "msg_type": "interactive",
    "card": {
      "header": {
        "title": {"tag": "plain_text", "content": "TITLE"},
        "template": "COLOR"
      },
      "elements": [
        {"tag": "markdown", "content": "BODY"}
      ]
    }
  }'

按事件类型使用的卡片模板:

事件标题颜色正文
experiment_done实验完成green结果表格、与基准的差异
review_scored第 N 轮评审:X/10blue(≥6)/ orange(<6)分数、结论、最突出的 3 项弱点
checkpoint检查点:等待输入yellow问题、选项、上下文
error错误:[type]red错误消息、失败内容
pipeline_done流水线完成purple最终摘要、交付物
custom自定义blue来自 $ARGUMENTS 的自由格式消息

curl 后立即返回——推送模式绝不会等待回复。

第 3 步:交互式通知(双向)

交互式模式使用 feishu-claude-code 作为桥接:

  1. 向桥接发送消息:

    curl -s -X POST "$BRIDGE_URL/send" \
      -H "Content-Type: application/json" \
      -d '{"type": "EVENT_TYPE", "title": "TITLE", "body": "BODY", "options": ["approve", "reject", "custom"]}'
    
  2. 等待回复(带超时):

    curl -s "$BRIDGE_URL/poll?timeout=$TIMEOUT_SECONDS"
    

    返回:{"reply": "approve"}、{"reply": "reject"}、{"reply": "用户输入的消息"} 或 {"timeout": true}

  3. 超时时:回退到 AUTO_PROCEED 行为(使用默认选项继续)。

  4. 将用户的回复返回给调用技能,以便其据此执行操作。

第 4 步:验证送达情况
  • 推送模式:检查 curl 退出代码。如果非零,记录警告,但不得阻塞工作流。
  • 交互式模式:如果无法连接到桥接,则回退到推送模式(如果配置了 webhook),否则静默跳过。

辅助函数(供其他技能使用)

其他技能应使用以下模式发送通知:

### Feishu Notification (if configured)

Check if `~/.claude/feishu.json` exists and mode is not "off":
- If **push** mode: send webhook notification with event summary
- If **interactive** mode: send notification and wait for user reply
- If **off** or file absent: skip entirely (no-op)

**此检查始终受保护。**如果配置文件不存在,技能会完全跳过通知代码块——零开销,零副作用。

事件目录

技能会在以下时刻发送这些事件:

技能事件时机
/auto-review-loopreview_scored每轮评审评分后
/auto-review-looppipeline_done循环完成(得分为正或达到最大轮数)
/auto-paper-improvement-loopreview_scored每轮评审评分后
/auto-paper-improvement-looppipeline_done所有轮次完成后
/run-experimentexperiment_doneScreen 会话结束后
/idea-discoverycheckpoint阶段之间(交互模式下)
/idea-discoverypipeline_done最终报告就绪后
/monitor-experimentexperiment_done收集结果后
/research-pipelinecheckpoint工作流阶段之间
/research-pipelinepipeline_done整个工作流完成后

关键规则

  • 绝不因无法连接 Feishu 而阻塞工作流。 始终采用失败时放行策略。
  • 绝不要求配置 Feishu —— 所有技能都必须在未配置时正常工作。
  • 配置文件不存在 = 模式关闭。 不报错、不警告、不记录日志。
  • 推送模式采用即发即忘。 发送 curl,检查退出代码,然后继续。
  • 交互超时 = 自动继续。 不要一直等待回复。
  • 遵循 AUTO_PROCEED:在交互模式下,如果用户在超时时间内未回复,则使用调用该技能时相同的自动继续逻辑。
  • 通知中不得包含机密信息。 绝不在 Feishu 消息中包含 API 密钥、令牌或密码。

评论

支持 Markdown