Skip to content

Latest commit

 

History

History
102 lines (79 loc) · 5.66 KB

File metadata and controls

102 lines (79 loc) · 5.66 KB
name waga
description 用飞书私聊远程指挥本机的 Cursor CLI 会话(Waga)。给当前会话起个名挂上监听后, 只响应飞书里带该名字前缀的消息,并把回复/状态/情绪表情发回飞书。当用户说 「挂 waga」「/waga-on」「上线飞书」「让我能用飞书远程指挥你」「起个 waga session」 「给 worker 派活」「/who」时使用。底层复用 $WAGA_DIR 仓库脚本。

Waga · Cursor CLI 版

用飞书私聊远程精准指挥本机某个 Cursor CLI 会话。把 Waga 的多会话路由 + 状态反馈 适配到 Cursor CLI:路由逻辑、回信/表情/卡片/spawn 等 helper 全部复用仓库脚本, 唯一与 Claude Code 版的区别是把 Monitor 持久工具换成 Cursor 的 「后台 Shell + notify_on_output」唤醒机制,并且 worker 可切换模型。

前置

  • lark-cli 已安装并配好 bot(见 README 的 Quick start / waga-setup.md)。
  • cursor-agent 已安装并登录(cursor-agent status 显示 Logged in)。
  • ~/.zshrc 已 export WAGA_DIR(本仓库目录)与 LARK_CLI_NO_PROXY=1
  • $WAGA_DIR/.env 内有 WAGA_CHAT_ID / WAGA_USER_ID(bot 身份收发,无需 auth login)。
  • 详细的飞书侧路由语法、表情两层设计、/who、/doctor 等,$WAGA_DIR/waga-on.md 为准

挂监听(Cursor 适配版 —— 关键差异)

Claude Code 用 Monitor(persistent:true) 跑 daemon 并靠 task-notification 唤醒会话; Cursor CLI 没有该工具。等价做法:把同一段 daemon 脚本写成独立 .sh,用后台 Shellis_background: true)启动,并设 notify_on_output 监听 [WAGA-MSG],命中即通知我。

执行 /waga-on [name] 时:

  1. 决定 name:用户传参 > 当前 cwd 的 basename > default。手机友好用 1-2 字符短名。
  2. 覆盖语义(不叠加):再次挂载前,先 kill 掉本会话之前起的 waga 后台 shell,再起新的; 否则两个 daemon 会并存、共抢 /tmp/waga_sticky.txt
  3. 生成 daemon 脚本(把 $WAGA_DIR/waga-on.md「挂载命令」那段 while 循环落盘):
cat > /tmp/waga_monitor_<NAME>.sh <<'WAGA_EOF'
export WAGA_ENGINE_LABEL=cursor          # ★卡片蓝名旁显示 · cursor
export WAGA_ENGINE_MODEL="<当前会话模型>"  # ★再右边显示模型,如 gemini-3.5-flash;可留空
# ←把 $WAGA_DIR/waga-on.md 中「## 挂载命令」代码块(export...到 done)整段粘进来
WAGA_EOF
chmod +x /tmp/waga_monitor_<NAME>.sh

引擎标签(必做):Cursor 侧所有发卡/回信都要在环境里带 WAGA_ENGINE_LABEL=cursor, 这样飞书卡片蓝色 name 旁会显示 · cursor · <模型>,与 Claude 拉起的卡区分。

  1. 用后台 Shell 启动并监听:调用 Shellcommand: bash /tmp/waga_monitor_<NAME>.sh <NAME>is_background: true,并设 notify_on_output 监听 \[WAGA-MSG\]|\[WAGA-ERR\]
  2. daemon 会先发上线卡片(waga-card.py online)并打印 [WAGA] listener armed as [<NAME>]

收到消息(被 notify_on_output 唤醒后)

读对应后台 shell 输出,找最新的 [WAGA-MSG] <ctime> [mid=<mid>] :: <正文> 和紧跟的 [WAGA-REMINDER](里面给好了 vibe / done / reply 整条命令,照抄即可)。 ⚠ 所有发卡/回信都要带 WAGA_ENGINE_LABEL=cursor。然后:

  1. 先贴情绪表情(读懂后按当下情绪挑一组 2-4 个、每次不同、绝不随机): bash "$WAGA_DIR/waga-react.sh" vibe <mid> "E1 E2 E3"
  2. 干活:可用所有 Cursor 工具。任务型先 announce: WAGA_ENGINE_LABEL=cursor python3 "$WAGA_DIR/waga-card.py" start <NAME> "收到,开始干X"stepdone
  3. 回信(铁律:必须用 lark-cli 发出去)WAGA_ENGINE_LABEL=cursor bash "$WAGA_DIR/waga-reply.sh" <NAME> "<回复>"
  4. 收尾换状态bash "$WAGA_DIR/waga-react.sh" done <mid>

远程起 worker(⚠ Cursor 会话必须用 cursor 版脚本,可切模型)

路由原则:起什么 worker 取决于调哪个 spawn 脚本,不是自动探测。

  • Cursor 的 WAGA → 必须调 waga-spawn-cursor.sh(底层 cursor-agent,可切模型)。
  • Claude Code 的 WAGA 才调 waga-spawn.sh(底层 claude)。二者独立、可并存。
bash "$WAGA_DIR/waga-spawn-cursor.sh" <名字> "初始任务" "<工作目录>" "<模型(可选)>"
# 例:
bash "$WAGA_DIR/waga-spawn-cursor.sh" api "把测试跑一遍" "$HOME/proj" gemini-3.1-pro
bash "$WAGA_DIR/waga-spawn-cursor.sh" web "" "$HOME/proj" gpt-5.5-high

模型优先级:第 4 参 > 环境变量 WAGA_CURSOR_MODEL > 账号默认。可用模型见 cursor-agent models(Gemini/GPT/Grok/Sonnet/Opus/Composer)。运行中切模型: 飞书发 <名字>: /model gpt-5.5-high(下一条生效)。

权限前置(一次性,用户本人做):headless worker 带 --force(等价 --dangerously-skip-permissions),AI 不能自我授权。需用户在 ~/.cursor/cli-config.jsonpermissions.allow 加一条精确指向该脚本的规则 (把路径换成你 clone 本仓库的真实绝对路径):

"Shell(bash \"/绝对路径/waga-for-cursor/waga-spawn-cursor.sh\"*)"
  • /whoname: /stopname: /statusname: /cd <路径>name: /model <model> 等飞书指令由 daemon 脚本内置处理。

Cursor 特有注意

  • 会话存活才有唤醒:后台 shell 与 notify_on_output 仅在当前 Cursor 会话活着时起效 (关窗即停,符合「关窗=注销」语义)。
  • 其余坑(emoji 大小写敏感、token ~7 天过期喷 [WAGA-ERR]lark-cli auth login、 代理 reset 用 LARK_CLI_NO_PROXY=1)见 README。